使用操纵杆编程Arduino Mega来控制直流电机

时间:2016-01-03 02:51:41

标签: arduino joystick

我正在尝试使用带有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);
}

现在,此代码打印出串行监视器中的操纵杆值,但根本不会旋转电机。我很肯定这些连接是正确的,因为它们是我之前使用的相同连接,只需将电机向前和向后运行。我可能在我的代码中遗漏了一些内容,但却无法看到它,所以任何反馈都表示赞赏。

1 个答案:

答案 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 {
    ...
}