Arduino电机的速度和方向

问题描述:

我想制作一个程序来控制我的Arduino蓝牙车。
我有很多麻烦使它在所需的方向和以所需的速度。到目前为止,我想这一点,但由于某种原因它不工作:Arduino电机的速度和方向

int motor1clock = 7, motor1clockc = 8, pwm1 = 3, pwm2 = 9, motor2clock = 10, motor2clocko = 16, speed; 
String inputString = "", junk; 

void setup() 
{ 
    pinMode(motor1clock, OUTPUT); 
    pinMode(motor1clockc, OUTPUT); 
    pinMode(pwm1, OUTPUT); 
    pinMode(motor2clocko, OUTPUT); 
    pinMode(motor2clock, OUTPUT); 
    pinMode(pwm2, OUTPUT); 
    Serial1.begin(9600); 
} 
void Forwards(int spee) 
{ 
    analogWrite(pwm2, spee); 
    analogWrite(pwm1, spee); 
    digitalWrite(motor1clock, LOW); 
    digitalWrite(motor1clockc, HIGH); 
    digitalWrite(motor2clocko, HIGH); 
    digitalWrite(motor2clock, LOW); 
} 
void Backwards(int spee) 
{ 
    analogWrite(pwm2, spee); 
    analogWrite(pwm1, spee); 
    digitalWrite(motor1clock, HIGH); 
    digitalWrite(motor1clockc, LOW); 
    digitalWrite(motor2clocko, LOW); 
    digitalWrite(motor2clock, HIGH); 
} 
void Steer_Left(int spee) 
{ 
    analogWrite(pwm2, spee - 20); 
    analogWrite(pwm1, spee); 
    digitalWrite(motor1clock, LOW); 
    digitalWrite(motor1clockc, HIGH); 
    digitalWrite(motor2clocko, LOW); 
    digitalWrite(motor2clock, HIGH); 
} 
void Steer_Right(int spee) 
{ 
    analogWrite(pwm2, spee); 
    analogWrite(pwm1, spee - 20); 
    digitalWrite(motor1clock, HIGH); 
    digitalWrite(motor1clockc, LOW); 
    digitalWrite(motor2clocko, HIGH); 
    digitalWrite(motor2clock, LOW); 
} 
void loop() 
{ 
    if (Serial1.available() > 0) { 
     String str = Serial1.readString(); 
     char inChar[3]; 
     str.toCharArray(inChar, 3); 

     while (Serial1.available() > 0) { 
      junk = Serial1.readString(); 
     } 
     int num = atoi(&inChar[1]); 
     speed = num; 
     Serial1.println(speed); 
     if (inChar[0] == 'A') { 
      Serial1.println(inChar[0]); 
      Forwards(speed); 
     } 

     if (inChar[0] == 'B') { 

      Backwards(speed); 
     } 

     if (inChar[0] == 'C') { 
      Steer_Left(speed); 
     } 

     if (inChar[0] == 'D') { 

      Steer_Right(speed); 
     } 
     if (inChar[0] != 'A' || inChar[0] != 'B' || inChar[0] != 'C' || inChar[0] != 'D') { 
      digitalWrite(motor1clock, LOW); 
      digitalWrite(motor1clockc, LOW); 
      digitalWrite(motor2clocko, LOW); 
      digitalWrite(motor2clock, LOW); 
     } 
     inputString = ""; 
    } 
} 

输入代码格式将是“速度指令”,例如:“A255”。

+0

除了尝试将可能的5个字符(字符串长度+空终止符)放入一个由3个字符组成的数组中,['Serial1.readString()'](https://www.arduino.cc/en/Serial/ReadString )有1秒的延迟。通过发送行并使用['Serial1.readStringUntil('\ n')'](https://www.arduino.cc/en/Reference/StreamReadStringUntil)来修复它。 –

+1

此外,“* not working *”并不是真正的问题描述。 –

字符串“A255”中有超过3个字节,所以我建议你定义inChar [6]。 而且,做了“Serial1.println(速度);”打印所需的速度?

+0

修复了它,它现在可以工作,但速度很慢 –