Re: [問題] Arduino藍牙快速傳值,造成數值錯亂

看板AndroidDev作者 (饅頭)時間12年前 (2013/03/08 14:02), 編輯推噓5(5020)
留言25則, 4人參與, 最新討論串2/2 (看更多)
試著在你的Main受值程式碼裡面, 把 buffer 的 allocation 移到 loop 裡面 while (true) { try { byte[] buffer = new byte[1024]; ==> 從外面移進來 // Read from the InputStream bytes = mmInStream.read(buffer); .... 雖然無法確定這是不是你這個問題的主因 (很有可能) 但原來的code可能有潛在的問題 因為你只有一份 buffer 當你收到第一筆資料, 透過 message 叫 UI thread 來處理同一個 buffer 而在同一個時間(可能還沒處理完), 有可能第二筆資料剛好來, 就會把 buffer 的內容覆蓋掉 (而 UI thread 可能還沒處理完舊的資料) ※ 引述《xezct1213 (xezct)》之銘言: : 板上前輩大家好 : 使用Arduino延遲10ms為間距 : 透過藍牙傳值給手機 : 手機受值會出現數值錯亂的現象 : 例如: : Arduino傳61.62.63.64 : 手機端顯示61.62.63.63.63.61 : 程式碼的部分是用BluetoothChat修改 : BluetoothChatService受值程式碼 : http://pastebin.com/hTjvskXr : Main受值顯示程式碼 : http://pastebin.com/AsNqREnm : ※給Arduino電壓是夠的 : 麻煩前輩解,感謝閱讀與回覆,謝謝您。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.80.67.18 ※ 編輯: MetalChao 來自: 210.80.67.18 (03/08 14:03) ※ 編輯: MetalChao 來自: 210.80.67.18 (03/08 14:11)

03/08 23:27, , 1F
移進來還是有相同的狀況 QQ
03/08 23:27, 1F

03/09 02:40, , 2F
這個時候 buffer 不是已經丟去 Handler 了嗎?
03/09 02:40, 2F

03/09 02:40, , 3F
還是他實際上還是指向同一個 buffer array ?
03/09 02:40, 3F

03/09 02:41, , 4F
我倒是很想先檢查 Handler 實際上收到的 buffer 內容
03/09 02:41, 4F

03/09 02:41, , 5F
先不做處理單純先印出來比對看看
03/09 02:41, 5F

03/09 13:33, , 6F
原來的code實際 byte array 只有一份,全部人都共用那一
03/09 13:33, 6F

03/09 13:34, , 7F
份 buffer; 只要 UI thread 來不及處理完,就可能出問題
03/09 13:34, 7F

03/09 13:38, , 8F
如果這個潛在問題改了還是不行,我也看不出來哪裡有問題
03/09 13:38, 8F

03/09 13:39, , 9F
了; 你可以照樓上的方式, 收到一段資料後, 先把全部內容
03/09 13:39, 9F

03/09 13:40, , 10F
印到 log 或 console 看看
03/09 13:40, 10F

03/09 13:40, , 11F
看是不是收到的資料就有錯
03/09 13:40, 11F

03/10 00:03, , 12F
如果讓while迴圈sleep直到case read處理完呢?
03/10 00:03, 12F

03/11 18:58, , 13F
C大的方法看不懂(〒︿〒)
03/11 18:58, 13F

03/11 18:58, , 14F
可以麻煩c大敘述詳細一點嗎?謝謝
03/11 18:58, 14F

03/11 19:10, , 15F
現在每次都重新 new 一個 buffer, 有沒有等就沒差了
03/11 19:10, 15F

03/11 19:11, , 16F
要的話就變成反過來UI thread要讓 receiving thread 知
03/11 19:11, 16F

03/11 19:11, , 17F
道, 便要做額外的溝通 (可利用 wait/notify)
03/11 19:11, 17F

03/11 19:12, , 18F
可以試試, 但我覺得如果在 loop 裡 new buffer 沒辦法
03/11 19:12, 18F

03/11 19:12, , 19F
解決, 等待做完這個方法可能也無法解決
03/11 19:12, 19F

03/11 19:14, , 20F
因為那表示我說的可能原因並不是原PO問題的主因
03/11 19:14, 20F

03/11 19:31, , 21F
另外要問原PO的是,如果每10ms送一筆資料, 然後你的UI
03/11 19:31, 21F

03/11 19:32, , 22F
又只有2個,那麼如果連續兩個 byte 都要寫到同一個 UI
03/11 19:32, 22F

03/11 19:33, , 23F
view 的話? 不是很快(0.01秒)就蓋掉原來的那個值了嗎?
03/11 19:33, 23F

03/12 02:18, , 24F
M大,我是利用ListView做顯示,用來即時顯示Arduino傳
03/12 02:18, 24F

03/12 02:18, , 25F
來的時間訊息
03/12 02:18, 25F
文章代碼(AID): #1HENy4zE (AndroidDev)
文章代碼(AID): #1HENy4zE (AndroidDev)