2015-07-19 33 views
1

您好,感謝您花時間看看這個。收到的額外字符:Arduino Serial

我正在試驗Arduino通過閱讀字符數組串行。這將最終用於與覆盆子pi進行通信,並將接收到的字符串如'100,200,300'拆分爲:Var1 = 100,Var2 = 200,Var3 = 300等。

環顧了各種論壇,寫我自己的串行字符串函數如下:

String message; 
int buflen = 12; 
int bytesread = 0; 


void setup() 
{ 
Serial.begin(9600); 
} 


void loop() 
{ 
    if (Serial.available() > 0) 
    { 
    message = ReadStringFromSerial(); 
    Serial.print("Read message is: "); 
    Serial.println(message); 
    } 
} 

String ReadStringFromSerial() 
{ 
    char serialarray[buflen]; 
    bytesread = Serial.readBytesUntil('\0', serialarray, buflen); 
    Serial.print("Array: "); 
    Serial.println(serialarray); 
    Serial.print("Bytes read: "); 
    Serial.println(bytesread); 
    String returnedmessage = String(serialarray); 
    return returnedmessage; 
} 

然而,當多次輸入「測試」到串口監視器,我得到如下:

Array: TestA 
Bytes read: 4 
Read message is: TestA 
Array: TestXXX 
Bytes read: 4 
Read message is: TestXXX 
Array: TestXXXXó 
Bytes read: 4 
Read message is: TestXXXXó 

我想知道在哪裏額外的角色來自我有點困惑。 此外,沒有串行監控添加任何額外的字符,如空字符「\ 0」還是隻是發回「測試」,而不是「測試\ 0」

您的幫助非常感謝,

羅賓

回答

1

當你宣佈你serialarray你只是設置一個指向可能包含以前已存儲的任何類型的數據的存儲位置。

那你是從串口讀取數據,直到「\ 0」(不知道是不是包括或實際上從來沒有發現因爲你沒有在監視器中鍵入它的話)。

在任何情況下,你所創建的字符串沒有終止。

你能做到這一點終止您的字符串:

bytesread = Serial.readBytesUntil('\0', serialarray, buflen); 
serialarray[bytesread] = '\0'; 

而且所有多餘的字符將消失...

+0

這太棒了,謝謝你。我會執行這個並報告回來! –