0

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

1 回答 1

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

于 2019-05-05T16:59:22.710 回答