|
发表于 2016-4-13 11:58:59
|
显示全部楼层
wwwusr 发表于 2016-4-12 16:00
串口通讯,或者是IIC通讯,都会存在这种问题(我目前也处于迷迷糊糊的状态中。。。)
Super169,大神,方便 ...
通訊在於雙方的協定, 並沒有一定的準則. 只要 發出 跟 接收 的一方, 同相同的協定就可以.
比如說, 要傳送一個 10 的數值, 你可以用 Serial.print 以字符 "1" 及 "0", 接收後再轉回數值.
也可以用 Serial.write 直接發出.
最重要是雙方有共識, 用什麼方法也可以. 問題是你著重於速度, 安全度, 還是要容易給人看 (機械之間的通訊, 原本不需要考慮這點的, 但很多時都會選用這個).
我自己做的, 不會理會是否容易看, 全部以資料的原來的形式送出, 不論是 int, float, double, .... 都不會進行轉換, 直接以 byte 的形式發送.
簡單的說, 要發送一個 float (相信最多人覺得有問題就是 float 的傳送吧), 四個 byte. 就用 byte pointer 把四個 byte 以 Serial.write 發出. 接收的一邊 以 Serial.Read 收到後, 一個個 byte 以 byte pointer 的形式放回 float 變數中. 不論 float, double, int, long, char[].... 只要知道要發送的數量, 都可以用這個方式發送.
這是最快最直接的方法, 過程有點複雜, 要了解每種 data type 的特性. 反正自己做的通訊, 雙邊都是自己做的, 有共同的協定就可以.
至於 PC 跟 arduino 通訊, 如果你指的是 serial monitor, 就只可以用 char[] 吧. 你在 PC 端輸入的是字符, 需要自已轉化成數值. 而 android 發出的, 在 PC 上看, arduino IDE 的 serial monitor 只可以顯示 ASCII, 如果用其他的, 可以顯示 HEX, 又或你自己寫個 PC 端, 就什麼也可以了. 因應你用的工具, 選擇所需的協定吧.
|
|