arduino 有时只执行串行命令

arduino executes serial commands only sometimes

我一直在尝试制作一个 arduino 项目,它根据串行输入改变电机方向。 我已经尝试了 google 搜索中的所有方法。 arduino 有时只响应。我知道我的板没有炸,因为其他板上也有同样的情况。

代码:

 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!");
     }

     }   

抱歉,如果我在错误的网站上问这个问题:(

每次调用 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!");
  }
}