本文延伸自 App Inventor 中文學習網的[取得像素顏色]範例,將觸碰點的RGB值經由藍牙丟給Arduino 101 去點亮 RGB 燈,您可以擴充多顆RGB LED或其他彩色模組來達到更有趣的效果,可以說是極簡易版的 Philip HUE 照明系統喔!
本範例使用 Arduino 101,如果您是使用HC05 06 這類型的藍牙模組,則需使用 App Inventor 的 BluetoothClient元件,兩者不可混用。
作者/攝影 | 曾吉弘 |
時間 | 3~4小時 |
成本 |
|
難度 | * * * * * |
材料表 |
|
本文將介紹如何取得觸碰點的 RGB 參數之後透過 BLE 送給 Arduino 101 來點亮 RGB LED。
先來看影片吧
App Inventor
Designer
- 使用 Canvas 來取得觸碰點座標。
- 兩個連線斷線用的按鈕:Btn_Connect / Btn_DisConnect
- 三個用來呈現RGB值的 Slider (無法拖動)
- BletoothLE:處理BLE通訊
- Clock:定期要求 BluetoothLE 將資料(RGB參數)發送給 Arduino 101
Blocks
1.初始化
宣告相關變數,其中addr 代表您所要連線之Arduino 101 藍牙位址,印在板子背面。程式初始化時,要求BluetoothLE元件開始掃瞄。
按下連線按鈕,BluetoothLE元件對指定位址裝置(Arduino 101)連線,並設定相關畫面元件是否可操作,並顯示”Connected”於螢幕狀態列。
斷線則剛好相反,斷開與Arduino 101之BLE連線之後將相關畫面元件恢復原狀,這樣才能重新操作。
3.滑動手指取得觸碰點RGB參數
使用 Ball.Dragged 事件,當拖動這個小球(代表您手指的位置)時,會執行以下動作:
- 清除畫面
- 將該觸碰點的GetPixelColor結果顯示在Canvas上,會是一個相當大的負整數後續使用select list item 去解出來之後就會是 0~255 的整數了。
- Ball 移動到觸碰點位置
- 使用select list item 搭配 split 指令去分別取得該點的紅色、綠色與藍色值,顯示於Label上即可。
接著在 Ball.Dragged 事件的下半,分別更新每一個 Slider 的指針位置(ThumbPosition)以及更新 r g b 三個變數的內容為該觸碰點的 r g b 顏色強度,準備要發送出去囉!
如果您覺得這裡的程式碼相當冗長的話,可以用一個副程式包起來讓主程式流程更簡潔易讀。
4.發送訊號
使用 Clock 元件每1秒鐘觸發一次 Clock.Timer事件,其中會使用 BluetoothLE.WriteIntValue 將 r g b 值的組合結果發送出去,例如 (128, 34, 255) 的組合結果就是 128034255,Arduino 收到之後再拆解即可。
Clock.Timer 事件的1秒鐘您可以自行修改為較小的數字,看看是否有比較好的操作體驗。
Arduino 101 code
重點在於 line 53~67 之間的if (LEDStatus.written())判斷式中,使用 incom = LEDStatus.value(); 來取得 App Inventor 送過來的整數值,並以 1000 為單位來拆開並顯示於 Serial Monitor,最後使用 analogWrite 指令去控制對應的 RGB LED 腳位就完成囉!
相關文章:
- [開箱文] Arduino 101 / Genuino 101 – Arduino.cc 與 Intel 合作,板載藍牙 BLE 與六軸加速度計/陀螺儀
- [App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 1 – LED 閃爍
- [App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 2 – LED PWM呼吸燈
- [App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 3 – 讀取Arduino 101類比腳位狀態
- [App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 4 – 機器手臂
- [App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 5 – 讀取DHT22 溫溼度模組資料