阅读Arduino Serial似乎非常不稳定

时间:2014-07-14 16:58:05

标签: c++ serial-port arduino

我有以下简单的代码来读取从计算机发送到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] = '\0';
                parse_command(buffer);
            } else {
                buffer[index++] = received;
            }
        } else {
            Serial.println('666'); // buffer overflow
        }
    }
}

命令类似于A123 B123 C123 D123 \ n

基本上是一系列空格分隔的指令,每个指令都以一个字母开头,后跟一个数字。命令以&#34; \ n&#34;。

结尾

读这个似乎非常不稳定。有时我会完美地得到命令,有时候我会错过第一个字母,有时是一对,有时它会以数字开头,...

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

在获得此代码之前,我只需使用Serial.available检查大小,然后Id等待一秒钟填充缓冲区,然后我将缓冲区复制到char *。这完美无瑕。我现在正在做这个循环等待\ n,这似乎更优雅,但它非常不稳定。

1 个答案:

答案 0 :(得分:0)

代码只需在第一个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] = '\0';
                    parse_command(buffer);
                }
            } else {
                Serial.println('666'); // buffer overflow
            }
        }
    }
}