2017-04-09 6 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

잠재적으로 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 *"은 문제에 대한 설명이 아닙니다. –

답변

0

문자열 "A255"에 3 바이트 이상이 있으므로 inChar [6]을 정의하는 것이 좋습니다. 그리고, "Serial1.println (속도);" 원하는 속도로 인쇄 하시겠습니까?

+0

고쳐서, 지금은 작동하지만 아주 느립니다. –

관련 문제