通过 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);
}
}
}
我希望我的 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);
}
}
}