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

(Serial.available() > 0) waits for user input

我在 Arduino 中遇到用户输入问题 ide。我希望 arduino 定期检查用户是否生成了一些输入字符串(arduino 每 3 秒检查一次),但即使 3 秒后没有输入(string 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;
  }
}

Serial::Available() 不阻塞。如果有可用字符,将调用 readStringUntil(),但在换行符可用之前不会 return - 因此这可能是您输入阻塞的地方。

以下可能是更安全的非阻塞解决方案:

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