本文介紹如何使用 App Inventor 擷取 LinkIt ONE 上的兩筆可變電阻資料,作法與 [雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機 是一樣的,只是 LinkIt ONE 在藍牙設定上有一點點不一樣,因此寫一篇分享一下。
除了可在Android 手機畫面上看到 LinkIt ONE 兩個類比腳位變化之外,還可畫線,類似小時候的磁力畫板(啊,暴露年紀…)
本文感謝 CAVEDU 實習生施力維完成
檔案請點我下載
延伸閱讀
[雙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









不好意思我想請問一下,在這個範例中
如果在LinkIt One端用serial port看藍芽的確有連接
但是在手機app端卻搜尋不到
這樣是LinkIt One天線的問題嗎還是程式問題?謝謝。
請問 serial port 的資訊是?我想看它停在哪一行?