2017-04-09 8 views
0

Arduino Bluetoothカーを制御するプログラムを作りたいと思います。
私は希望の方向と希望のスピードでそれを作るのに苦労しています。これまでのところ、私はこれを試してみましたが、何らかの理由でそれが機能していません。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

3文字の配列に潜在的に5文字(文字列長+ヌル終端文字)を入れようとするだけでなく、['Serial1.readString()'](https://www.arduino.cc/en/Serial/ReadString )に1秒の遅延があります。行を送信し、['Serial1.readStringUntil( '\ n')'](https://www.arduino.cc/en/Reference/StreamReadStringUntil)を使って修正してください。 –

+1

また、「*動作していません」とは、問題の説明ではありません。 –

答えて

0

文字列 "A255"に3バイト以上ありますので、inChar [6]を定義することをお勧めします。 そして、 "Serial1.println(speed);"希望の速度を印刷しますか?

+0

それはそれを固定しました、それは今動作しますが、それは非常に遅いです –

関連する問題