繁体   English   中英

Serial.read()跳过串行输入

[英]Serial.read() skips over serial input

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

看看我是否包括这行Serial.println("Serial.available() = " + String(Serial.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;
  }
}

缓冲区丢失

有打印输出

这与缓冲区有关吗? 我可以用fflush(SOME_SECRET_BUFFER)刷新它吗?

您是否尝试过Serial.readString()来解析所有丢失的字符?

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

该代码假定第一个字符到达后,所有字符均已到达。 不是这种情况。 增加println会消耗CPU时间,因此具有增加延迟的效果。 此延迟允许接收其余的原始消息。

这里需要具有适合您的应用程序超时的接收功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM