C++ Serial.read()跳过串行输入

C++ Serial.read()跳过串行输入,c++,arduino,arduino-uno,arduino-ide,C++,Arduino,Arduino Uno,Arduino Ide,尝试使用Arduino Uno和标准IDE发送串行消息。解析发送到设备的串行消息时遇到问题 如果我包括这一行Serial.printlnSerial.available=+StringSerial.available;我将能够阅读邮件的其余部分。如果这被注释掉了,我将只看到消息的第一个字母,跳过其余的。附加的输出图像,我看到有和没有添加的代码行 // the setup routine runs once when you press reset: void setup() { // in

尝试使用Arduino Uno和标准IDE发送串行消息。解析发送到设备的串行消息时遇到问题

如果我包括这一行Serial.printlnSerial.available=+StringSerial.available;我将能够阅读邮件的其余部分。如果这被注释掉了,我将只看到消息的第一个字母,跳过其余的。附加的输出图像,我看到有和没有添加的代码行

// the setup routine runs once when you press reset:
void setup() {

  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  while (!Serial) {} // wait for serial to be initialized

  Serial.println("Setup called. Serial port ready.");

  Serial.println("Waiting for time sync message...");
  while (!Serial.available()) {}
  processSyncMessage();
}

void processSyncMessage() {

  // parse first letter of message
  char messageHeader = (char) Serial.read();

  switch (messageHeader) {
    case TIME_HEADER:
       // do processing
      break;
    default:
      Serial.println("Unknown message sent with header: " + String(messageHeader));

      // must include this line in order to see the entire message sent
      // just calling a println or a Serial.available() doesn't work ????
      Serial.println("Serial.available() = " + String(Serial.available()));

      Serial.println("---start of message");
      for (int r = 0; r != -1; r = Serial.read()) {
        Serial.print((char) r);
      }
      Serial.println();
      Serial.println("---end of message");
      break;
  }
}

这是否与缓冲区有关?我可以用fflushSOME_SECRET_BUFFER以某种方式刷新它吗?

您是否尝试了Serial.readString来解析全部缺失的字符?

串行数据一次发送和接收一个字符。在9600波特时,传输速率约为每毫秒一个字符

代码假设第一个字符到达后,所有字符都已到达。事实并非如此。添加println会消耗CPU时间,因此具有添加延迟的效果。此延迟允许接收原始消息的其余部分


此处需要为应用程序提供一个具有适当超时的接收函数。

Arduino不是C,deleted标记。这可以通过Serial.printlnSerial.available=+StringSerial.available来证明;安装程序只调用一次。您应该定义一个循环函数,并将设置的最后3行代码移入其中以进行连续操作。如果readString不符合您的要求,您可以设置readString的超时时间,但这是不可行的。您可以提供一个示例吗?