从Arduino串行阅读似乎是非常不稳定的

Reading from Arduino Serial seems to be very unstable

本文关键字:似乎是 非常 不稳定 Arduino      更新时间:2023-10-16

我有以下简单的代码来读取从计算机发送到Arduino Mega板的命令:

void get_command() 
{
    char received;
    int index = 0;
    while (Serial.available() > 0) {
        if (index < BUFFER_SIZE -1) {
            received = Serial.read();
            if (received == 'n') {
                buffer[index] = '';
                parse_command(buffer);
            } else {
                buffer[index++] = received;
            }
        } else {
            Serial.println('666'); // buffer overflow
        }
    }
}

命令如下:A123 B123 C123 D123n

基本上是由空格分隔的指令序列,每个指令以字母开头,后跟一个数字。命令以"n"结尾。

阅读这个似乎很不稳定。有时我很好地理解了命令,有时我遗漏了第一个字母,有时是两个字母,有时它以数字开头,…

我通过串行监视器发送命令,设置为换行。

在编写此代码之前,我只需使用Serial检查大小。可用,然后等待一秒钟来填充缓冲区,然后将缓冲区复制到char*。这是完美的工作。我现在正在做这个循环,等待一个n,这看起来更优雅,但它非常不稳定。

只需在第一个Serial.available()之后添加延迟(100)

这是代码:

void get_command() 
{
    char received;
    if (Serial.available() > 0) {
        delay(100); // let the buffer fill up
        int index = 0;
        while (Serial.available() > 0) {
            if (index < BUFFER_SIZE -1) {
                received = Serial.read();
                if (received != 'n') {
                    buffer[index] = received;
                    index++;
                } else {
                    buffer[index] = '';
                    parse_command(buffer);
                }
            } else {
                Serial.println('666'); // buffer overflow
            }
        }
    }
}