2015-12-20 71 views
0

我正在寫一個代碼,通過藍牙讀取6位數的字符。這是我的代碼讀取值(我使用序列1):爲什麼Serail.readBytes()讀取垃圾值?

Serial.println("DAMN YOU"); 
char data[DATA_LENGTH+1]; //DATA_LENGTH is 6 
data[DATA_LENGTH]='\n'; 
uint8_t actu_length,from_index,to_index,from_road=0,to_road=0; 
if (Serial1.available() > 0){ 
    Serial1.readBytes(data,DATA_LENGTH); 
    Serial.println("bla bla bal"); 
    Serial.println(data); 
} 

但這給了一些垃圾值。

爲什麼會發生這種情況?我錯過了哪一點?

有沒有其他有效的方法通過串口通信讀取6位數字在arduino?

謝謝你的時間。

回答

0

Serial1if (Serial1.available() > 0){爲真時,可能只有1個字節被接收!

因此讀取6很可能會產生不好的結果。 等待,直到你有你需要什麼:

if (Serial1.available() >= 6){

,因爲沒有足夠的數據,readBytes就會停止閱讀。如果data是一個局部變量,則未寫入的單元格的內容可以是任何內容(除了最後一個單元格之外,您不會將其初始化/填充已知數據)。

+0

它讀取數據,但混亂的方式。就像我發送「123456」它收到「* 1 2 | 9 9」 – Anklon

+0

你是否等到收到足夠的數據,就像我在我的回答中提到的那樣?你的波特率是否正確? –

+0

是的,我願意。 和寬廣的速率是相同的(9600)爲串行通信和HC-05藍牙模塊。 – Anklon