(Serial.available()> 0)等待用户输入

时间:2019-05-05 16:14:36

标签: arduino arduino-c++

我在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;
  }
}

1 个答案:

答案 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变量。