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;
}
}
Missing Buffer
With printout
这与缓冲区有某种关系吗?我可以用 fflush(SOME_SECRET_BUFFER)
以某种方式冲洗它吗?
你试过 Serial.readString() 来解析整个缺失的字符吗?
串行数据一次发送和接收一个字符。在 9600 波特率下,传输速率大约为每毫秒一个字符。
代码假设第一个字符到达后,所有字符都到达。不是这种情况。添加 println
消耗 CPU 时间,因此具有添加延迟的效果。此延迟允许接收原始消息的其余部分。
此处需要为您的应用程序设置适当超时的接收函数。
尝试使用 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() 来解析整个缺失的字符吗?
串行数据一次发送和接收一个字符。在 9600 波特率下,传输速率大约为每毫秒一个字符。
代码假设第一个字符到达后,所有字符都到达。不是这种情况。添加 println
消耗 CPU 时间,因此具有添加延迟的效果。此延迟允许接收原始消息的其余部分。
此处需要为您的应用程序设置适当超时的接收函数。