2014年4月4日 星期五

Android : S4A_Bluetooth 藍芽遙控 App

2014年4月4日 星期五
上回用 Google Play 中找到的 「Bluetooth Serial Controller」來遙控安裝了 S4A firmware 的 Arduino ,可以自訂按鈕要送出什麼資料的功能滿方便的,小缺點是得自己算出 Arduino 腳位的字碼,哈~光那些十六進制的符號可能就會嚇壞一堆人了。有了之前寫 MIT App Inventor 的經驗,加上對如何和裝了 S4A firmware 的 Arduino 通訊有較清楚的了解後,決定用 App Inventor 重新再寫一個 S4A_Bluetooth 的 App 來控制我的「S4A 科學魔法車」。

S4A_Bluetooth 的主要特性如下:

  • 針對 S4A firmware 而設計。
  • 可以自訂每個按鈕要使用哪些 Arduino 的腳位及送出的值,包括 pin 10,11,12,13 (Digital:on/off)及 pin 5,6,9 (PWM: 0~255)。
  • 自訂的值會自動儲存,打開程式時會自動載入。



使用方法

由於這個 App 發送的資料是依 S4A firmware 的需求來編碼的,所以 Arduino 要先安裝 S4A 網站中的 firmware ,不然就得下載 App Inventer 的 source (請參「檔案下載」中的連結) 自己改「setPinValue」的那個 block 發送符合您靭體的資料給 Arduino。

Android 下載並安裝完 S4A_BlueTooth.apk (請參「檔案下載」中的連結),首次啟動這個 App 後,先按「設定按鈕的功能」的按鈕,並由清單中點選想設定的按鈕,切換畫面後,即可設定按鈕欲連結的 Arduino 腳位,及按下去後要送出的值。設定好即可按「儲存設定值」來儲存設定值。



所有按鈕的功能都設定好了,就可以開啟 Android 的藍芽功能,並按「藍芽連線」來選取要連線的藍芽裝置。

2014.04.04 版
2014.04.05 版:增加顯示感應器數值的功能



確定藍芽已連線完畢,試試設定的按鈕功能是否正常。


程式原始碼

這個 App 使用到兩個 Screen,ScreenConfig 主要是處理設定按鈕時的畫面,它處理完會回傳按鈕的名稱及各位腳位的設定值(依序為 pin 10,11,12,13,5,6,9)。如果腳位未使用到,值會被改為負數( 0 則以 -9999 代替)。回傳的值會以按鈕的名稱為 tag 存入 TinyDB1 中,在啟動 App 時會被重新載入。

程式中的 Timer1 負責每隔一秒鐘由藍芽接收 Arduino 傳來的資料,Timer2 每隔 0.75 秒送出兩 bytes 的資料給 Arduino 以維持Arduino 腳位的設定值不會被 S4A firmware reset。


ToDo

  • motor 4 逆時 : pin4=1, pin7=0
  • motor 4 順時 : pin4=2, pin7=0
  • motor 7 逆時 : pin4=0, pin7=1
  • motor 7 順時 : pin4=0, pin7=2
  • motor 停 : pin4=0, pin7=0
  • motor 前 : pin4=1, pin7=2
  • motor 後 : pin4=2, pin7=1
  • motor 右 : pin4=1, pin7=1
  • motor 左 : pin4=2, pin7=2
  • motor 8 角度 : pin8=角度 (0~180)



檔案下載




相關文章



更新記錄
  • 2014.04.05 顯示 Arduino 傳來 A0~A5, D2, D3 的數值。
  • 2014.04.04 初版。


24 則留言:

  1. 雄哥:你的內容真是太專業啦 ^_^ 閱讀你寫的文章每次都能學到很豐富的內容 :)Thank you!

    回覆刪除
    回覆
    1. 您過獎了, 其實我也是初學者而已, 把心得記錄下來, 主要是怕自己久了會忘了。

      刪除
  2. 新手發問:
    請問Arduino安裝完S4A網站中的firmware,
    Android安裝完您的S4A_BlueTooth.apk,
    Android設定好前進、後退、右轉、左轉、停止,
    插完線用好馬達,確定藍芽已連線完畢,
    使用apk就能使馬達動了!? 
    (這麼厲害!!?
    Arduino都不用另外打程式? 
    (因為S4A網站中的firmware已經安裝到Arduino?
    (還是其實需要?如需要能附範例藉看看...?
    -------------------------------
    另外我直接使用Motoduino(Arduino + L293D),
    能與您的apk設定一起使用?

    回覆刪除
    回覆
    1. 如果手上有相關硬體,行不行,能不能,試了便知結果囉!基本上,這種東西的趣味不就在 Learning by doing ?Motoduino 個人沒玩過,聽說它是根據 S4A 而設計的,在猜,應該可以用吧?您試了再幫忙回報一下。

      刪除
  3. 歡迎您來F B中找S4A,交流一些心得,台中市 昭漢邀請高手進場。於google play以s4a找,中市有上架app分享!

    回覆刪除
    回覆
    1. 江老師您好:
      久仰大名,中教網的那個 App 我有用過哦!也在 blog 文章中推過。高手不敢當,玩 Arduino 我是初學者而已,還要多多跟各位前輩請益。

      刪除
  4. 雄哥好,我是松山工農 恆誠老師
    感謝您無私的分享,目前在藍芽應用上,較大的困擾是緩衝處理。
    學生很快就會傳送一堆指令,讓buffer灌滿當機。
    從您的aia看來,似乎並未處理。
    還是您再S4A段有處理了。
    感謝

    回覆刪除
    回覆
    1. 蘇老師您好:
      buffer 灌爆的情形在我買的 HC-05 特別嚴重,為此困擾了很久,後來解決的方法是只截取最後送出的十幾個 bytes , 其它的通通丟棄不用,不然 App 玩沒幾下就掛點。

      刪除
    2. 請問在app程式中要如何解決buffer灌爆的問題
      程式要怎麼寫

      刪除
  5. 老師您好,想請問我都有照上面的步驟做,先設定好前進後退等,也連接好藍芽(我使用HC-06)但是連接好以後,A0-A5,D2D3的數值也都沒有跳,輸出的功能也沒有效果,這是為什麼呢? (使用S4AFirmware15韌體)

    回覆刪除
    回覆
    1. 檢查一下您的 HC-06 有設定鮑率(Baud rate)為 38400 嗎? S4A firmware 通訊時是用 38400, 如果鮑率不同, 解碼可能會有誤。

      刪除
    2. 這串是S4AFirmware15 裡面的
      void setup()
      {
      Serial.begin(38400);
      Serial.flush();
      configurePins();
      configureServomotors();
      lastDataReceivedTime = millis();
      }


      第二句 Serial.begin(38400);應該就是設定Baud rate

      是不是藍芽上RX TX的設定呢?
      藍芽上的RX我接到UNO Pin 11
      藍芽上的TX我接到UNO Pin 10

      還請指教

      刪除
    3. 要改藍牙模組的,因為 S4A UI 那裡的是 38400,這部分改不到。另外,藍牙接在 D0 & D1, 可以參考「魔法車」那一篇。

      刪除
    4. 老師您好:
      我上午已經照您HC-06設定一文中,把鮑率改成38400,系統也很給力的回我ok38400。但一把RX.TX改成D0.D1後連結手機藍芽,A0-A5的數據依然沒有反應,app也跳出error 516的警告。想請問老師這是什麼原因呢? 是燒錄進arduino的韌體有誤,還是藍芽鮑率修改沒有成功。懇請老師指教

      刪除
  6. 您寫的真用心!
    可以請教這篇Arduino的code嗎 ?
    想做給小朋友玩得
    謝謝您 ^^"

    回覆刪除
    回覆
    1. 您好:
      本文中 Android App 需搭配的 Arduino code 是用別人寫的 S4A, 您可以用「s4a」google 到原始網站下載。
      如果想用自己專用的, 我另外一篇中有類似的, 文中有附 source
      雄 : Android : MeArm 藍芽遙控 App

      有問題可以一起討論。

      刪除
  7. 好的,我試試!!!
    非常謝謝您~真的很用心
    謝謝 ^^

    回覆刪除
  8. 超讚的文章,感謝分享 ^^

    回覆刪除
  9. 作者已經移除這則留言。

    回覆刪除
  10. 老師您好:
    請問app invertor 2 如何才能同時連接數個hc-05 謝謝!

    回覆刪除
    回覆
    1. 您好:
      抱歉!沒玩過一對多的。印象中 HC-05 client 對 client 只能一對一。

      刪除
  11. 你好,我試了您的APP測試,按下前進之後過一秒之後都會停止是正常的媽

    回覆刪除
  12. 雄哥您好,上面S4A_BlueTooth.apk網址過期了可以再補上嗎,謝謝

    回覆刪除

 
雄::gsyan © 2009. Design by Pocket