【LA計畫】App Inventor 接收 LinkIt ONE 兩筆可變電阻值,還可做磁力畫板
本文介紹如何使用 App Inventor 擷取 LinkIt ONE 上的兩筆可變電阻資料,作法與 [雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機 是一樣的,只是 LinkIt ONE 在藍牙設定上有一點點不一樣,因此寫一篇分享一下。
除了可在Android 手機畫面上看到 LinkIt ONE 兩個類比腳位變化之外,還可畫線,類似小時候的磁力畫板(啊,暴露年紀...)
本文感謝 CAVEDU 實習生施力維完成
延伸閱讀
程式說明 在此只列出 Clock.Timer 事件,首先送出一個 122 數字,LinkIt ONE接收到之後就會把 A0, A1 值丟給 App Inventor。變數X是 LinkIt ONE 傳來的 A0腳位值,Y則是A1. 由於 Canvas 的大小是 320 x 320,因此我們設定把 A0原本的 0~ 1023 範圍透過 map 指令轉為 0~ 320,對應到 X 軸座標。A1 則是對應到 Y 座標,最後使用 Canvas.DrawLine 指令就可以隨意畫圖囉!
對應的片段如下
[pastacode lang="c" message="LinkIt ONE 端透過 LBTServer 將 A0, A1 依序送出" highlight="" provider="manual" manual="if(LBTServer.connected())%7B%0A%20%20%20%20%20%20a1%20%3D%20analogRead(A0)%3B%0A%20%20%20%20%20%20a2%20%3D%20analogRead(A1)%3B%0A%20%20%20%20%20%20a1%20%3D%20map(a1%2C0%2C1023%2C0%2C320)%3B%0A%20%20%20%20%20%20a2%20%3D%20map(a2%2C0%2C1023%2C0%2C320)%3B%0A%20%20%20%20%20%20Serial.printf(%22%25d%5Ct%25d%5Cn%22%2Ca1%2Ca2)%3B%0A%20%20%20%20%20%20if(LBTServer.read()%20%3D%3D%20122)%7B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write('j')%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a1%2F256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a1%25256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a2%2F256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a2%25256)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20delay(10)%3B%0A%20%20%7D"/]
LinkIt ONE 端完整程式 [pastacode lang="c" message="LinkIt ONE 送出 A0 , A1 類比腳位給 App Inventor" highlight="" provider="manual" manual="%23include%20%3CLBT.h%3E%0A%23include%20%3CLBTServer.h%3E%0A%23define%20serverName%20%22BTserverTest%22%0A%23define%20serverWaitTime%205%0A%0Achar%20BTwrite%3B%0Avoid%20setup()%20%7B%0A%20%20Serial.begin(115200)%3B%0A%20%20while%20(!Serial)%3B%0A%20%20LBTServer.begin((uint8_t*)serverName)%3B%0A%20%20Serial.printf(%22%5B%25s%5D%20is%20waiting%20for%20any%20client...%5Cn%22%2CserverName)%3B%0A%20%20%0A%20%20while(!LBTServer.accept(serverWaitTime))%7B%0A%20%20%20%20Serial.println(%22%20...%20%22)%3B%0A%20%20%7D%0A%20%20Serial.println(%22%3D%3D%3DConnected!%3D%3D%3D%22)%3B%0A%7D%0Aint%20a1%2Ca2%3B%0Avoid%20loop()%20%7B%0A%20%20if(LBTServer.connected())%7B%0A%20%20%20%20%20%20a1%20%3D%20analogRead(A0)%3B%0A%20%20%20%20%20%20a2%20%3D%20analogRead(A1)%3B%0A%20%20%20%20%20%20a1%20%3D%20map(a1%2C0%2C1023%2C0%2C320)%3B%0A%20%20%20%20%20%20a2%20%3D%20map(a2%2C0%2C1023%2C0%2C320)%3B%0A%20%20%20%20%20%20Serial.printf(%22%25d%5Ct%25d%5Cn%22%2Ca1%2Ca2)%3B%0A%20%20%20%20%20%20if(LBTServer.read()%20%3D%3D%20122)%7B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write('j')%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a1%2F256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a1%25256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a2%2F256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a2%25256)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20delay(10)%3B%0A%20%20%7D%0A%20%20else%7B%0A%20%20%20%20Serial.println(%22%3D%3D%3DDisconnected!%3D%3D%3D%22)%3B%0A%20%20%20%20Serial.printf(%22%5B%25s%5D%20is%20waiting%20for%20any%20client...%5Cn%22%2CserverName)%3B%0A%20%20%20%20while(!LBTServer.accept(serverWaitTime))%7B%0A%20%20%20%20%20%20Serial.println(%22%20...%20%22)%3B%0A%20%20%20%20%7D%0A%20%20%20%20Serial.println(%22%3D%3D%3DConnected!%3D%3D%3D%22)%3B%0A%20%20%7D%0A%7D"/]
執行畫面 從 Serial Monitor 可以看到 A0, A1 目前的狀態
轉動 A0, A1 的可變電阻就可以畫出隨意線條,是不是和磁力畫板很像呢?左側是 A0 數值,右側是 A1
檔案請點我下載
延伸閱讀
[雙A計劃] Part0:App Inventor 透過藍牙傳送訊號給 Arduino
[雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅
[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗
[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人
[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍
[雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機
程式說明 在此只列出 Clock.Timer 事件,首先送出一個 122 數字,LinkIt ONE接收到之後就會把 A0, A1 值丟給 App Inventor。變數X是 LinkIt ONE 傳來的 A0腳位值,Y則是A1. 由於 Canvas 的大小是 320 x 320,因此我們設定把 A0原本的 0~ 1023 範圍透過 map 指令轉為 0~ 320,對應到 X 軸座標。A1 則是對應到 Y 座標,最後使用 Canvas.DrawLine 指令就可以隨意畫圖囉!
對應的片段如下
[pastacode lang="c" message="LinkIt ONE 端透過 LBTServer 將 A0, A1 依序送出" highlight="" provider="manual" manual="if(LBTServer.connected())%7B%0A%20%20%20%20%20%20a1%20%3D%20analogRead(A0)%3B%0A%20%20%20%20%20%20a2%20%3D%20analogRead(A1)%3B%0A%20%20%20%20%20%20a1%20%3D%20map(a1%2C0%2C1023%2C0%2C320)%3B%0A%20%20%20%20%20%20a2%20%3D%20map(a2%2C0%2C1023%2C0%2C320)%3B%0A%20%20%20%20%20%20Serial.printf(%22%25d%5Ct%25d%5Cn%22%2Ca1%2Ca2)%3B%0A%20%20%20%20%20%20if(LBTServer.read()%20%3D%3D%20122)%7B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write('j')%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a1%2F256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a1%25256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a2%2F256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a2%25256)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20delay(10)%3B%0A%20%20%7D"/]
LinkIt ONE 端完整程式 [pastacode lang="c" message="LinkIt ONE 送出 A0 , A1 類比腳位給 App Inventor" highlight="" provider="manual" manual="%23include%20%3CLBT.h%3E%0A%23include%20%3CLBTServer.h%3E%0A%23define%20serverName%20%22BTserverTest%22%0A%23define%20serverWaitTime%205%0A%0Achar%20BTwrite%3B%0Avoid%20setup()%20%7B%0A%20%20Serial.begin(115200)%3B%0A%20%20while%20(!Serial)%3B%0A%20%20LBTServer.begin((uint8_t*)serverName)%3B%0A%20%20Serial.printf(%22%5B%25s%5D%20is%20waiting%20for%20any%20client...%5Cn%22%2CserverName)%3B%0A%20%20%0A%20%20while(!LBTServer.accept(serverWaitTime))%7B%0A%20%20%20%20Serial.println(%22%20...%20%22)%3B%0A%20%20%7D%0A%20%20Serial.println(%22%3D%3D%3DConnected!%3D%3D%3D%22)%3B%0A%7D%0Aint%20a1%2Ca2%3B%0Avoid%20loop()%20%7B%0A%20%20if(LBTServer.connected())%7B%0A%20%20%20%20%20%20a1%20%3D%20analogRead(A0)%3B%0A%20%20%20%20%20%20a2%20%3D%20analogRead(A1)%3B%0A%20%20%20%20%20%20a1%20%3D%20map(a1%2C0%2C1023%2C0%2C320)%3B%0A%20%20%20%20%20%20a2%20%3D%20map(a2%2C0%2C1023%2C0%2C320)%3B%0A%20%20%20%20%20%20Serial.printf(%22%25d%5Ct%25d%5Cn%22%2Ca1%2Ca2)%3B%0A%20%20%20%20%20%20if(LBTServer.read()%20%3D%3D%20122)%7B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write('j')%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a1%2F256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a1%25256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a2%2F256)%3B%0A%20%20%20%20%20%20%20%20BTwrite%20%3D%20LBTServer.write(a2%25256)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20delay(10)%3B%0A%20%20%7D%0A%20%20else%7B%0A%20%20%20%20Serial.println(%22%3D%3D%3DDisconnected!%3D%3D%3D%22)%3B%0A%20%20%20%20Serial.printf(%22%5B%25s%5D%20is%20waiting%20for%20any%20client...%5Cn%22%2CserverName)%3B%0A%20%20%20%20while(!LBTServer.accept(serverWaitTime))%7B%0A%20%20%20%20%20%20Serial.println(%22%20...%20%22)%3B%0A%20%20%20%20%7D%0A%20%20%20%20Serial.println(%22%3D%3D%3DConnected!%3D%3D%3D%22)%3B%0A%20%20%7D%0A%7D"/]
執行畫面 從 Serial Monitor 可以看到 A0, A1 目前的狀態
轉動 A0, A1 的可變電阻就可以畫出隨意線條,是不是和磁力畫板很像呢?左側是 A0 數值,右側是 A1
留言 💬 (0)
還沒有留言,來當第一個。