我正在尝试使用带有Arduino Mega的操纵杆来控制直流电机。我已经能够运行直流电机,以及分别找到操纵杆的电位计值。我只使用操纵杆的y轴,以便在操纵杆启动时使马达向前移动,然后在操纵杆向下时向后移动。操纵杆的中间是~504。
// motor one
int enA = 3;
int in1 = 22;
int in2 = 24;
// y_joystick
int y_joy = A1;
int joy_value = 0;
void setup() {
// set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode (y_joy, INPUT);
Serial.begin(9600);
}
void loop() {
joy_value = analogRead(y_joy);
if (0 < joy_value < 500) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, 120);
} else if (511 < joy_value < 1024) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, 120);
} else {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
analogWrite(enA, 0);
}
Serial.print("y-axis: ");
Serial.println(analogRead(y_joy));
Serial.print("\n");
delay(1000);
}
现在,此代码打印出串行监视器中的操纵杆值,但根本不会旋转电机。我很肯定这些连接是正确的,因为它们是我之前使用的相同连接,只需将电机向前和向后运行。我可能在我的代码中遗漏了一些内容,但却无法看到它,所以任何反馈都表示赞赏。
答案 0 :(得分:1)
您应该使用具有双重条件的逻辑运算符。尝试替换你的if / else语句:
if (0 < joy_value < 500) {
...
} else if (511 < joy_value < 1024) {
...
} else {
...
}
由:
if (0 < joy_value && joy_value < 500) {
...
} else if (511 < joy_value && joy_value < 1024) {
...
} else {
...
}