1. 程式人生 > >關於arduino通過串列埠傳送到processing的資料混亂(錯誤\顯示不正確)的問題解答

關於arduino通過串列埠傳送到processing的資料混亂(錯誤\顯示不正確)的問題解答

最近的教學中,已經開始使用processing和arduino進行串列埠通訊的互動,使用中發現有的同學遇到了arduino傳送給processing的資料存在顯示不正確,甚至混亂的現象。這裡給予統一解釋。

arduino程式碼完成的工作是將模擬訊號口讀入模擬資料,然後經過map對映為0到254之間的資料,以便於後續進行顏色設定的數值來使用。大體程式碼如下:
void loop()
{
int val;
int percent;
val=analogRead(pot);
percent=map(val,0,1023,0,254);
Serial.print(percent); //問題就出在這裡
}

我們將Serial.print()或者Serial.println()修改為Serial.write(),問題就解決了

void loop()
{
int val;
int percent;
val=analogRead(pot);
percent=map(val,0,1023,0,254);
Serial.write(percent);
}

原因是,Serial.write向串列埠寫入的是二進位制的資料,而Serial.print或者Serial.println寫入的是按照字串的方式向串列埠寫入資料的。但最要命的是,processing的串列埠的read函式,則是按照二進位制的資料來讀取的,這樣,兩邊的寫入和讀取編碼的方式不一致,所以得到的就是混亂的資料了,顯示自然不正確。
所以,我們要使資料顯示正確,我們的讀取和寫入的編碼方式就要一直,所以,我們可以推知,我們也可以用println在arduino端傳送,然後在processing端用readString來接收。如下圖程式碼:
在這裡插入圖片描述


processing端
在這裡插入圖片描述