2014-11-05 26 views
0

當TX和RX引腳連接到我的HC-05模塊上傳代碼到我的Arduino時,一串隨機字符被髮送到TX緩衝區,當我連接到設備,這些字符被髮送並弄亂了通信。上傳代碼後有沒有辦法清除這個緩衝區?每當我上傳時我都會斷開電線,但我想找一個更簡單的方法。謝謝!在代碼上傳過程中發送給藍牙TX的Arduino隨機字符

回答

1

好吧,如果你使用串口同時發送數據和過程的程序,你會看到它在BT的另一邊......可能的解決方案:每次

  • 斷開藍牙模塊當你需要編程Arduino
  • 關閉HC-05(或將其保持在復位狀態),直到arduino說,你要編程Arduino
  • 關閉另一個BT設備(或只是斷開它)它正在進行通信(因此在程序開始時使用GPIO來控制復位引腳或晶體管爲BT供電)
  • 在HC-05和Arduino串行端口之間使用一個3狀態驅動(一個驅動用於TX,另一個用於RX),並在arduino程序開始時激活其輸出。

我不喜歡djUniversal的解決方案,因爲您無法控制PC傳輸的內容;例如,如果您決定使用字節0xAA來指示傳輸開始,那麼如果PC發送0xAA,另一個設備認爲Arduino正在傳輸。選擇更長的字節序列會有所幫助,因爲序列變得不太可能,但是.....

此外,您必須在EVERY命令上發送它,而不僅僅是在開始時,因爲您必須重置arduino以對其進行編程(因此其他設備不知道何時停止考慮數據)。

+0

一個兩字節的序列通常應該足夠了。除非他正在推動傳輸數據的極限,否則這應該與他的效率差不多。我之所以建議我做的是因爲他說垃圾價值有負面影響。如果在日常傳輸過程中發生數據損壞(在正常範圍內)會怎麼樣?頭文件和檢查將使整體代碼更加健壯。 – djUniversal 2014-11-06 23:02:46

+0

我目前在每次傳輸開始時都有1個字節的標題,以確定它是哪種類型的命令。我已經試過在程序加載之前不能連接,但即使我以後連接了手機,它也會收到Arduino發送的連接字符。此外,看起來垃圾字符串每次都是相同的,所以我可以在Arduino設置上發送一個命令,該命令在字符串中找不到,表示它已被加載。不過,現在,我將使用重置引腳。謝謝(你的)信息! – 2014-11-13 13:55:54

1

唯一的解決方法是每次發送一個可能有幾個字節的頭部來發送消息。另一個程序可以在開始執行命令之前等待這些字符。在從緩衝區中讀取這些字符之前,您只需執行一個Serial.read()循環來擺脫垃圾。另外,如果垃圾中的字符會讓你的程序非常糟糕,那麼你可能需要考慮創建一些粗略的校驗和來確認正確的傳輸。

需要幫助編碼?讓我知道。

相關問題