2014-07-14 123 views
0

我有以下簡單的代碼來讀取計算機發送到一個Arduino兆臺指令:從Arduino的串行讀似乎是非常不穩定的

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

基本上是一個由空格分隔的指令序列,每條指令都由一個字母開頭,後跟一個數字。一個命令以「\ n」結尾。

讀這看起來很不穩定。有時我會完美地得到命令,有時我會錯過第一個字母,有時候會是一對,有時候會以數字開始,...

我通過串行監視器發送命令,設置爲換行符。

在使用此代碼之前,我只需使用Serial.available檢查大小,然後等待一秒鐘以填充緩衝區,然後將緩衝區複製到char *。這工作完美無瑕。我現在正在做這個循環,等待\ n,這似乎更優雅,但它非常不穩定。

回答

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 
      } 
     } 
    } 
}