《超圖解Arduino互動設計入門》書本的藍牙遙控機器人APP修正程式

本文提供《超圖解Arduino互動設計入門》書本的"BTRobotControl.apk"(藍牙遙控機器人APP)修正程式,並說明處置過程。

我的手機是HTC Desire,原廠的系統ROM版本是2.2 (Froyo)。在最初測試藍牙序列埠通訊過程中,它一直無法和藍牙序列埠模組建立連線,後來發現是這一款手機韌體(官方 Android 2.2 版)的 bug。

大概是少有人使用Desire手機的藍牙序列通訊功能(連接藍牙耳機沒問題),再加上Deaire已算是老爺機了,HTC並沒有修正這個bug。我改刷對岸的小米(MIUI)Android 2.3.7 系統,藍牙序列埠就能正常運作了(如果想要在Desire上執行4.x版系統,國外的XDA論壇有諸多選擇)。

今天拿我內人的Sony Xperia X8手機測試(Android系統版本2.1),藍牙序列埠連線沒問題:

Sony Xperia X8手機執行藍牙遙控機器人APP

但發現《超圖解Arduino互動設計入門》書本光碟裡的"BTRobotControl.apk"(藍牙遙控機器人APP),無法傳送「左轉」的訊息。

其實此APP畫面上的每個控制按鍵,背後的程式邏輯都是一樣的(請參閱書本E-25頁說明):

App Inventor裡的按鈕控制程式區塊

不知道為什麼,唯獨「左方向鍵"LeftButton"」有問題。一個可能的原因,是我在編輯App Inventor程式時,大多用Ctrl+C, Ctrl+V鍵複製、貼上選取的程式區塊再加以修改,而不是每次都從左邊的「指令工具箱」拖放新的程式區塊:

複製App Inventor的程式區塊
點選某個程式區塊,再按下Ctrl和C鍵即可複製。

因此,我先刪除「左方向鍵"LeftButton"」的程式區塊,再乖乖地從「指令工具箱」,以拖放的方式,重新設定它的事件處理與傳送藍牙訊息的程式。

結果更慘,我只重做「左方向鍵"LeftButton"」的程式,現在卻剩下「停止」鈕可正常使用。

最後,回到App Inventor的APP元件編排畫面,刪掉除了「停止」鈕以外的按鈕元件(Button)再重新放置按鈕以及對應的程式區塊,總算搞定!

請下載修正後的"BTRobotControl.apk"(藍牙遙控機器人APP)與App Inventor原始碼(ZIP壓縮,約1.22MB)。

延伸閱讀

Posts created 467

18 thoughts on “《超圖解Arduino互動設計入門》書本的藍牙遙控機器人APP修正程式

  1. 我已經連接vcc,gnd,txd,rxd,藍芽也已經連上,但為甚麼Arduino一直收不到訊號,導致無法驅動遙控車。key,state要連嗎?謝謝

    1. hi cotin:

      藍牙模組只需要連接Vcc, GND, TxD和RxD。請先參考14-10頁的「動手做14-1」單元,在電腦上連接測試看看。

      have fun!
      jeffrey

  2. 我改製作紅外線遙控, 在動手做12-2中,我將IRremote放入指定位置後,從Arduino範例中開啟檔案,但在編譯時,卻出現錯誤:
    D:\Arduino\Arduino開發工具\Windows\arduino-1.0.3\libraries\IRremote\IRremote.cpp:266: error: ‘TCNT2’ was not declared in this scope

    ‘TCNT2’是甚麼??要額外下載嗎

    1. hi cotin:

      TCNT2代表ATmega處理器內部,時序控制的”Timer/Counter 2″(計時器∕計數器2)暫存器。

      我猜想你的控制板是Leonardo(李奧納多),因為微處理器不同,請改用這個IRremote版本的程式庫覆蓋並重新編譯程式。另外。根據此程式庫”IRremoteInt.h”檔案中的設定,在採用ATmega32U4處理器的板子上,紅外線發射腳是10,而非第3腳。

      IRemote程式庫的作者Ken Shirriff已經有一段時間沒有更新程式,Chris Young先生將此程式庫稍作改良,寫了一個“IRLib”紅外線遙控程式庫,先提供你參考,我尚未嘗試過。

      have fun!
      jeffrey

  3. 的確是 Leonardo(李奧納多),會再嘗試。
    另外想再問個問題,關於藍芽遙控在設定軟體序列埠時,發現不能任意改藍芽傳送腳的位置,只能在8、9、10、11、12的位置,不然無法傳送訊號給Arduino,但接收腳卻可以任意設定。請問這是因為我的控制板是Leonardo(李奧納多),不同的微處理器導致的嗎?如何設定在其他腳位呢?
    感謝趙老師您的詳細解答,不勝感激。

  4. App Inventor
    的藍芽 連線
    會挑手機
    有些手機連線沒問題
    有些手機 就無法建立連線 連錯誤訊息都沒有
    但用Java for android sdk 寫的 又可以正常使用

    不知道 App Inventor 的 BluetoothClient 是不是有問題

    不知道 各位版主是否遇過 相似問題

    1. 感謝告知!我在HTC Desire, Samsung Note II, Sony Xperia V等手機上測試都沒問題。

      thanks,
      jeffrey

  5. 你好, 我有製作藍芽坦克但在 L298跟Arduino在電源連接上觀念問題想請教, 共有3個狀況分述如下

    A) Arduino採用獨立9V電池扣電源, L298外接6V(4個3號電池), 藍芽遙控OK, 車子也會動, 但 L298 跟Arduino不是要共地嗎? 我發現不接GND (L298-6V的GND 接到Arduino的 GND), 車子一樣會跑. 這是為什麼? 這樣L298怎樣辨識訊號呢?

    B) 我的L298 模組 (Keyes) 是老師說的A型, 上有一5V&GND的Output pins. 我試著連到 Arduino 的VIN & GND, Arduino 可以Work(因為連藍芽時閃燈頻率可確認工作正常) , 但卻又無法驅動L298, 我想到共地的觀念, 把L298-6V的GND 接到Arduino的 GND, 還是不動, 這是為什麼?

    C) 後來 我把 L298-馬達電源PORT 的 6V& GND 再試接到 Arduino 的 VIN & GND, Arduino明明就可以Work, 但卻又不能驅動L298, 真的是非常奇怪, Why? Did I miss anything?

    我是一個無相關電子背景的上班族, 有一點點自學Coding的經驗, 只是看到老師寫的書才開始玩 Arduino, 所以問的問題可能不專業, 請海涵–

    By the way, 跟你一樣, 我念書的非常迷遙控車 我國中第一台遙控車可是GRASS HOPPER 蚱蜢 (入門車), 雖不是發燒, 但我們也可算是同好吧
    ^^ 哈哈哈

    1. hi jason:

      關於”A”型L298N馬達控制器,請參閱「L298N馬達控制板接線與控制程式補充」。Arduino、L298N控制板和馬達的確是要「共地」,電位才有共通的參考點,至於為何沒有共地也能運轉,就我的理解是,即便參考點可能不同,但訊號剛好也能被馬達控制器辨認出高、低電位,所以仍能控制。

      thanks,
      jeffrey

  6. 红米2下载安装 “BTRobotControl.apk” 360手机助手 提示木马,这是为什么?

  7. 老師
    請一個130的馬達跟一個MG996R servo使用同一電源 (2顆#18650–> 3.7V的電池串聯), 在馬達轉動時, 控制servo轉動回到原點 (90度) 都會抖個兩三下,我知道Servo若另採獨立電源時可解除此一現象, 但若不考慮獨立電源的情況下,還有甚麼方法可解決呢? 謝謝 ^^

    1. hi jason:

      請嘗試在伺服馬達的正、負電源並接一個0.1uF電容看看。

      thanks,
      jeffrey

  8. 老師,

    我試了並接電容到servo, 但依然還是會抖動, 還有其他辦法嗎? 謝謝

    1. 請把0.1uF電容改接訊號輸入和接地試試看,再不行的話,在伺服馬達的電源和接地並接大一點的電容,如:10uF,請留意電容極性。

      thanks,
      jeffrey

  9. 老師,

    不好意思, 兩種方法我都試了, 但servo依然還是會抖動, 請問是否問題出在電源分配上呢? 謝謝

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top