Arduino (Serial.available()>;0)等待用户输入
我在ArduinoIDE中面临用户输入问题。我希望arduino定期检查用户是否生成一些输入字符串(arduino每3秒检查一次),但即使3秒后没有输入(字符串顺序=”),arduino也会等待用户输入,当我键入一些内容时,它会退出“checkIncomingOrder”功能并再等待3秒。如蒙指教,我将不胜感激。我的简单代码如下:Arduino (Serial.available()>;0)等待用户输入,arduino,arduino-c++,Arduino,Arduino C++,我在ArduinoIDE中面临用户输入问题。我希望arduino定期检查用户是否生成一些输入字符串(arduino每3秒检查一次),但即使3秒后没有输入(字符串顺序=”),arduino也会等待用户输入,当我键入一些内容时,它会退出“checkIncomingOrder”功能并再等待3秒。如蒙指教,我将不胜感激。我的简单代码如下: String order = ""; int timer; void setup() { Serial.begin(9600); timer = 0; }
String order = "";
int timer;
void setup() {
Serial.begin(9600);
timer = 0;
}
void loop() {
if (timer == 3)
{
checkIncomingOrder();
}
else
{
delay(1000);
Serial.println("waiting");
timer++;
}
}
void checkIncomingOrder() {
if (Serial.available() > 0) {
order = Serial.readStringUntil('\n');
}
if (order == "") {
return;
} else {
Serial.println("Order is: " + order);
order = "";
timer = 0;
}
}
Serial::Available()
不阻塞。如果有可用字符,将调用readStringUntil()
,但在换行可用之前不会返回,因此可能会发生输入阻塞
以下可能是更安全的非阻塞解决方案:
void checkIncomingOrder()
{
char ch = 0 ;
while( ch != '\n' && Serial.available() > 0 )
{
Serial.readBytes( &ch, 1 ) ;
order += ch ;
}
if( ch == '\n' )
{
Serial.println("Order is: " + order) ;
order = "" ;
timer = 0 ;
}
}
它允许您连续检查输入行,而不是每三秒检查一次,从而使解决方案更具响应性:
void loop()
{
checkIncomingOrder();
}
允许依次删除
计时器
变量。如果有可用字符,将调用readStringUntil()
,但在换行可用之前不会返回。