Arduino Serial.readStringUntil没有正确检测终结者字符

时间:2017-01-25 13:48:38

标签: c++ arduino arduino-ide

我有这段代码:

void setup() {
  Serial.begin(9600);
  while (!Serial){}
  Serial.println("Connected");
  Serial.println("L");
  Serial.println("R");
  Serial.println("B");
  Serial.println("S");
  Serial.println("T");
}

void loop() {
  evalComms(Serial.readStringUntil("0"));
}

void evalComms(String recv){
  if (recv == "L"){
    Serial.println("ok L " + String(Serial.parseInt()));
  } else if (recv == "R"){
    Serial.println("ok R " + String(Serial.parseInt()));
  } else if (recv == "B") {
    Serial.println("ok B " + String(Serial.parseInt()));
  } else if (recv == "S") {
    Serial.println("ok S");
  } else if (recv == "T"){
    Serial.println("ok T");
  } else if (recv != ""){
     Serial.println("Comm error. Read: " + recv);
  }
}  

预期的I / O场景: IN:L020 OUT:好的L 20

实际I / O场景: IN:L020 OUT:Comm错误。阅读:L020

我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试:

Serial.readStringUntil('0')因为根据docs,它接受​​char

否则我建议将终止字符改为\n(ENTER),

然后在序列号上:"L\n20"将为您提供正确的输出。

void loop() 
{
    if(Serial.available() > 0)
    {
        evalComms( Serial.readStringUntil('\n') );
    }
}