[LA計畫] App Inventor 接收 LinkIt ONE 兩筆可變電阻值,還可做磁力畫板

本文介紹如何使用 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 指令就可以隨意畫圖囉!

01

對應的片段如下

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 端透過 LBTServer 將 A0, A1 依序送出

 

 


 

 

LinkIt ONE 端完整程式

#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!===");
  }
}
LinkIt ONE 送出 A0 , A1 類比腳位給 App Inventor


 

執行畫面

從 Serial Monitor 可以看到 A0, A1 目前的狀態

11713381_783552385096897_1979904894_n

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

 

11739516_783552328430236_792456203_n 11668094_783552338430235_89140845_n

 

About CAVEDU 阿吉 - 雜工 (2521 Articles)

CAVEDU 教育團隊 打雜

Contact: Website

2 Comments on [LA計畫] App Inventor 接收 LinkIt ONE 兩筆可變電阻值,還可做磁力畫板

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

Leave a comment

Your email address will not be published.


*