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

對應的片段如下
LinkIt ONE 端透過 LBTServer 將 A0, A1 依序送出
if(LBTServer.connected()){
a1 = analogRead(A0);
a2 = analogRead(A1);
a1 = map(a1,0,1023,0,320);
a2 = map(a2,0,1023,0,320);
Serial.printf("%d\t%d\n",a1,a2);
if(LBTServer.read() == 122){
BTwrite = LBTServer.write('j');
BTwrite = LBTServer.write(a1/256);
BTwrite = LBTServer.write(a1%256);
BTwrite = LBTServer.write(a2/256);
BTwrite = LBTServer.write(a2%256);
}
delay(10);
}
LinkIt ONE 端完整程式
LinkIt ONE 送出 A0 , A1 類比腳位給 App Inventor
#include <LBT.h>
#include <LBTServer.h>
#define serverName "BTserverTest"
#define serverWaitTime 5
char BTwrite;
void setup() {
Serial.begin(115200);
while (!Serial);
LBTServer.begin((uint8_t*)serverName);
Serial.printf("[%s] is waiting for any client...\n",serverName);
while(!LBTServer.accept(serverWaitTime)){
Serial.println(" ... ");
}
Serial.println("===Connected!===");
}
int a1,a2;
void loop() {
if(LBTServer.connected()){
a1 = analogRead(A0);
a2 = analogRead(A1);
a1 = map(a1,0,1023,0,320);
a2 = map(a2,0,1023,0,320);
Serial.printf("%d\t%d\n",a1,a2);
if(LBTServer.read() == 122){
BTwrite = LBTServer.write('j');
BTwrite = LBTServer.write(a1/256);
BTwrite = LBTServer.write(a1%256);
BTwrite = LBTServer.write(a2/256);
BTwrite = LBTServer.write(a2%256);
}
delay(10);
}
else{
Serial.println("===Disconnected!===");
Serial.printf("[%s] is waiting for any client...\n",serverName);
while(!LBTServer.accept(serverWaitTime)){
Serial.println(" ... ");
}
Serial.println("===Connected!===");
}
}
執行畫面
從 Serial Monitor 可以看到 A0, A1 目前的狀態

轉動 A0, A1 的可變電阻就可以畫出隨意線條,是不是和磁力畫板很像呢?左側是 A0 數值,右側是 A1

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