Arduino выполняет последовательные команды только иногда - PullRequest
0 голосов
/ 22 сентября 2019

Я пытался создать проект arduino, который изменяет направление двигателя на основе последовательного входа.Я попробовал все на поиск Google.Ардуино только иногда отвечает.Я знаю, что моя доска не прожарена, потому что то же самое происходит на других досках.

код:

 const int motorApinA = 6;
  const int motorApinB = 7;
  const int motorBpinA = 8;
  const int motorBpinB = 9;
  const int LED_Strip_pos_pin = 2;


void setup() {
  Serial.begin(9600);
  pinMode(motorApinA, OUTPUT);
  pinMode(motorApinB, OUTPUT);
  pinMode(motorBpinA, OUTPUT);
  pinMode(motorBpinB, OUTPUT);
  pinMode(LED_Strip_pos_pin, OUTPUT);
  Serial.write("yay, your code is working");


}

void loop() 
  {
     if (Serial.read() == 'F')
     {
       digitalWrite(motorApinA, HIGH);
       digitalWrite(motorApinB, LOW);
       digitalWrite(motorBpinB, HIGH);
       digitalWrite(motorBpinA, LOW);
       Serial.println("Done!");
     }
     if (Serial.read() == 'B')
     {
       digitalWrite(motorApinB, HIGH);
       digitalWrite(motorApinA, LOW);
       digitalWrite(motorBpinA, HIGH);
       digitalWrite(motorBpinB, LOW);
       Serial.println("Done!");

     }
     if (Serial.read() == 'L')
     {
       digitalWrite(motorApinA, HIGH);
       digitalWrite(motorApinB, LOW);
       digitalWrite(motorBpinA, HIGH);
       digitalWrite(motorBpinB, LOW);
       Serial.println("Done!");

     }
     if (Serial.read() == 'R')
     {
       digitalWrite(motorApinB, HIGH);
       digitalWrite(motorApinA, LOW);
       digitalWrite(motorBpinB, HIGH);
       digitalWrite(motorBpinA, LOW);
       Serial.println("Done!");

     }
     if (Serial.read() == 'S')
     {
       digitalWrite(motorApinA, LOW);
       digitalWrite(motorApinB, LOW);
       digitalWrite(motorBpinB, LOW);
       digitalWrite(motorBpinA, LOW);
       Serial.println("Done!");
     }

     }   

извините, если я спросил это не на том сайте: (

1 Ответ

0 голосов
/ 22 сентября 2019

Каждый раз, когда вы вызываете Serial.read(), он читает первый символ в буфере.Допустим, у вас есть 'B' в вашем буфере.Если ваша программа не окажется на if (Serial.read() == 'B'), она не вызовет нужного вам действия.Вам следует сохранить возвращаемое значение из Serial.read() и оценить его.

void loop()  {

  char c = Serial.read();

  if (c == 'F') {
    Serial.println("F!");
  }

  if (c == 'B') {
    Serial.println("B!");
  }

  if (c == 'L') {
    Serial.println("L!");
  }

  if (c == 'R') {
    Serial.println("R!");
  }

  if (c == 'S') {
    Serial.println("S!");
  }
}
...