1

我想打印错误,以防我在串行监视器中输入的单词与长度为 9 的单词不同,但它一直打印错误,因为程序本身不知道我何时输入单词。

// C++ code
//
void setup()
{
 Serial.begin(9600);
 Serial.println("Checksum");
}

void loop()
{

  String s = Serial.readString();

  if (s.length() == 9)
  {
    for (int i = 0; i < 9; i++)
    {
      Serial.print(s[i]);
      Serial.println(" ");
      Serial.print((byte)s[i], HEX);
      Serial.println(" ");
      Serial.println(" ");
      Serial.println();
    }


    Serial.println("Ok");
  }

  if (s.length() != 9)  
   {
    //Serial.println("Error"); //here is the error
   }

}
4

1 回答 1

0

如果用户输入了某些内容,您只想处理输入。要测试是否有一些传入字符,请Serial.available()Serial.readString().

readString等待下一个字符直到超时。默认超时为 1000 毫秒。因此,如果您从串行监视器发送一个字符串,readString 函数将在最后接收到的字符后等待一秒钟。您希望设置更短的超时,因为接收字符之间的时间在微秒范围内。例如用于Serial.setTimeout(10);将超时设置为 10 毫秒。

作为 readString 的替代方法,您可以使用readStringUntil,或者如果您想读入字符缓冲区,则可以使用readBytesUntil

如果您在串行监视器中将行尾设置设置为“无换行符”以外的其他设置,则接收到的字符串将以一两个换行符结尾,这将使其比您预期的要长。删除这些空白字符以及输入文本周围的任何空格,您可以使用String 的trim函数作为s.trim();

于 2021-10-27T15:09:02.187 回答