Arduino中Serial.read()與Serial.write()關於數字的不同處理

Arduino的編程中,串口輸入與輸出都是針對ASCII碼值的,比如字母's'的ASCII碼值爲115。

輸入方面,對於Serial.read(), monitor中輸入's'或者115,程序得到的值都爲's'. 而且Serial.read()每次只能接受一個byte的數據,如果想要輸入字符串,則需要專門寫一段程序來實現。

輸出方面,理論上Serial.write('s') 與Serial.write(115) 應該相同,然而事實並非如此。實際測試中,發現Serial.write(115) 與Serial.write('115') 相同,由此可以推測Serial.write()函數中有代碼專門對這種情況進行了處理,將數字隱式地轉化成了字符串,使用戶不用關心ASCII碼,並儘量貼近於其他語言。然而缺點就是與Serial.read()的不統一。

另外,針對這種情況,Matlab的fwrite() 函數就做的前後一致,下面是一段關於串口傳輸的Matlab代碼:

COM='COM4';
s=serial(COM);
fopen(s);
set(s, 'BaudRate', 57600);
fwrite(s, 's');
fwrite(s, 115);

打開串口COM4,並設置其波特率爲57600,兩句fwrite() 的輸出結果經測試一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章