我在Arduino IDE中遇到用户输入问题。我希望arduino定期检查用户是否生成了一些输入字符串(arduino每3秒检查一次),但是即使3秒后没有输入(字符串order =“”),arduino也会等待用户输入,当我键入内容时,退出“ checkIncomingOrder”函数,然后再等待3秒钟。如有任何建议,我将不胜感激。我的简单代码如下:
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;
}
}
答案 0 :(得分:1)
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();
}
依次允许删除timer
变量。