2016-02-02 54 views
-2

我試圖通過UART中的Arduino數據發送到指紋掃描器 我使用的陣列,以發送指令接收數據的陣列和正常工作使用UART的Arduino

for(i =0 ; i<= 24 ; i++) 
    { 
    Serial.write(SendArray[i]); 
    SendArray[i] =0; 
    } 

的問題是,當我」米嘗試接收來自指紋 響應指紋響應是24個字節,所以我試圖接收的字節數,並將其存儲在24個元件

for(k=0 ; k<=24 ; k++) 
    { 
     RecieveArray[k] = Serial.read(); 

    } 

但陣列當我嘗試從接收到的陣列打印元件我很奇怪ymbols

+1

哪些類型'Serial','SendArray'和'RecieveArray'的?什麼'Serial.read()'返回? – gmoshkin

+0

你使用什麼協議與他的掃描儀?你期望得到什麼,以及你如何檢測/顯示'奇怪的符號'?請注意,您似乎正在發送/請求25個字符? –

+0

'Serial.read()'返回一個'int','Serial.write'用於發送二進制數據,所以如果你試圖直接顯示這些數據,你會看到不可打印的字符。 後處理接收到的數據將其轉換爲ASCII碼或管理與「chars」的通信 –

回答

0

調用在一個循環Serial.read()將返回-1如果沒有數據可用,或者當數據傳送仍在通過串口線。您可能在該接收環路上用-1填充緩衝區。

你可以做的就是等待Serial.available()調用Serial.read()之前變得大於零:

for(k = 0; k < 24; k++) { 
    while (Serial.available() == 0); 
    ReceiveArray[k] = Serial.read(); 
} 
0

OP正試圖用24元的工作,但在兩個地方是循環25次。當然導致無效的數組訪問。

char SendArray[24] = ... 

// for(i =0 ; i<= 24 ; i++) 
for(i = 0; i < 24; i++) { 
    Serial.write(SendArray[i]); 
    SendArray[i] = 0; 
} 

// for(k=0 ; k<=24 ; k++) 
for(k = 0; k < 24; k++) 
    RecieveArray[k] = Serial.read(); // Receive spelled wrong 
+0

它不工作,仍然得到亂碼 –

+0

@Muhammed阿什拉夫「不工作」是沒有用的。 「仍然有無法讀取的字符」不如發佈您收到的內容,期望的內容以及最簡單的代碼是否有用。例如 – chux

+0

我給{85,170,36,1,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39, 1}的指紋數據的該序列..指紋應與ACK回覆這樣{0x55,0xAA,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01} 我應該存儲這個序列,例如做操作就可以了,我有爲0x01保存爲用戶ID 我試圖存儲例如元素#3然後使用serial.print()打印它。看到和知道它的價值 我得到這個 [鏈接](http://i.imgur.com/zwCZQ0h.png) –