通过 COM 端口的 Arduino 通信不工作

Arduino communication via COM Port isnt working

我希望我的 Arduino 在串行端口中读取“打开”时点亮 LED。 在 Serial.print(serialData); 时它会打印出他阅读的内容,但在 if (serialData == "on") 时它不会工作。

int led1 = 9;
int led2 = 6;
String serialData;
void setup() {      
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(10);
}

void loop() {
  if (Serial.available() > 0){
    serialData = Serial.readString();
    Serial.print(serialData);
    if (serialData == "on"){
      analogWrite(led1, 255);
    }
    if (serialData == "off"){
      analogWrite(led1, 0);
    }
  }
}

有人知道我做错了什么吗?

您的代码中有两个问题:

  • 超时设置为10ms。 10ms,最多只能输入一个字符。 readString() 将在单个字符后 return 并且读取的字符串可能是“o”、“n”、“f”。
  • 当您按下 RETURN 键时,还会传输一个回车符 return 和一个换行符 ("\r\n")。

解决方案是大大增加超时时间并使用readStringUntil() 读取直到发现换行符。这表示已输入完整的单词(或命令)。

此外,马车return和换行需要修剪掉。

#include <Arduino.h>

int led1 = 9;
int led2 = 6;
String serialData;

void setup() {      
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(2000);
}

void loop() {
  if (Serial.available() > 0){
    serialData = Serial.readStringUntil('\n');
    serialData.trim();
    Serial.println(serialData);
    if (serialData == "on"){
      analogWrite(led1, 255);
    }
    if (serialData == "off"){
      analogWrite(led1, 0);
    }
  }
}