如果他在串行埠中讀取“on”,我希望我的 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);
}
}
}
有誰知道,我做錯了什么?
uj5u.com熱心網友回復:
您的代碼中有兩個問題:
- 超時設定為 10 毫秒。在 10 毫秒內,您最多可以輸入一個字符。
readString()將在單個字符后回傳,讀取的字串可能是“o”、“n”、“f”。 - 當您按下 RETURN 鍵時,還會傳輸回車符和換行符(“\r\n”)。
解決方案是顯著增加超時并用于readStringUntil()讀取直到發現換行符。這表明已輸入了完整的字(或命令)。
此外,回車和換行需要修剪掉。
#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);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/463688.html
標籤:C 串行端口 arduino-uno
