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

标签 c++ arduino arduino-uno arduino-ide

尝试使用 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;
  }
}

Missing Buffer

With printout

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

最佳答案

您是否尝试过 Serial.readString() 来解析整个缺失的字符?

关于c++ - Serial.read() 跳过串行输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45515499/

相关文章:

c++ - 模板导出麻烦

c++ - 重载 cout 导致重复定义

arduino - 为什么 #define 中的除法会导致代码中的除法输出不同的答案

java - 当端口忙于另一个java程序时使用arduino串行监视器?

c++ - 带 Arduino 的 2 位加法器

c++ - 返回无效或引用 self ?

c++ - 编译简单的 Hello World 时出现多个 "multiple definition of ..."

c++ - lambda 函数返回值的有效性

java - 如何与arduino和java进行串口通信?

c++ - Arduino Pow() 和 Armstrong 数问题