2013-10-08 109 views
1

使用Serial.write串行發送字節數組時發生錯誤。使用Serial.write串行發送字節數組時發生錯誤

 byte buf[] = {125, 126, 127, 2000, 5000}; 

int i = Serial.write(buf, sizeof(buf)); 

for(int i = 0; i < (sizeof(buf)/sizeof(buf[0])); i++) 
    { 
      Serial.println(buf[i]); 
    } 

輸出:

}~??125 
126 
127 
208 
136 

任意而在啓動未知charcters。我使用的Arduino版本1.0.5

+0

請問你究竟想在這裏告訴我們什麼:「* ...任何時候對於未知的字符在開始... *」? – alk

+0

在開始時獲取未知字符的任何想法.... –

回答

2

他們不是不明的人物,那就是你有什麼印:

int i = Serial.write(buf, sizeof(buf)); 

只需選中一個ASCII tablebuf[0] = 125 = '{'

隨着write()你沒有任何形式書寫的原始數據的格式。您的第一個字節是值爲125的二進制文件01111101。如果字符被解釋爲char,則該字節對應於字符{。您的串行通信將傳入的字節解釋爲字符,因此它會打印'{'。

如果要在串行通信中打印125作爲字符串,則必須發送buf[] = {49, 50, 53}。或者你必須把你的interget轉換成一個字符串。

+0

是的,你是對的...但任何想法,爲什麼它採取ASCII字符? –

+0

看看編輯的答案 – Federico

0

還有什麼問題是,您正在使用值高於255的byte類型。嘗試更改爲int16_t

0

開始時的字符是您發送的buff數字的ASCII表示。 Arduino串行監視器監視所有活動,並打印出您的.write命令。 .writeln你以後做的,在原始的.write之後另外打印。

所以你看到的是arduino發送你的命令的ASCII表示。

PS: 數字2000和5000不適合該字節,因此您發送的最後兩個字節可能已損壞。

相關問題