[雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機

大家久等了, 本篇文章告訴您如何在 Android 手機端接收兩筆 Arduino 的資料,這次是以 A0, A1 兩隻腳位來處理。本範例感謝嘉義高工張老師提供。

如果您要換成其他元件,例如數位感測器的話,做法是一樣的。請先看一下這個元件的資料範圍是多少。對於本範例的架構來說,最後就是透過藍牙傳一個陣列出去,因此重點在於您是否可先在 Serial Monitor 中看到正確的資料範圍。不過一般來說都會有讀值得範例程式,所以不用太擔心啦!

您可以擴充這個架構到 N 筆,但是筆數愈多,掉資料的機會也愈高。請自行斟酌喔!

[雙A計畫] 常見問題整理

[雙A計劃] Part0:App Inventor 透過藍牙傳送訊號給 Arduino

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

English version

Arduino LED Blink

Arduino LED PWM

Arduino LED Blink (Arduino 101 with BLE)

Arduino LED PWM (Arduino 101 with BLE)

材料清單:

1 Android系統智慧型手機

2.Arduino相容開發板

3.藍牙收發接收器(本系列使用JY-MCU04 or JY-MCU05)

4. 電位計

5. 光敏電阻

6. 1k~10k 歐姆電阻,用於光敏電阻

請按照電路圖將電路接上,接了一個電位器(A0)與光敏電阻(A1)。當然啦,您也可以兩個腳位都用相同的元件,方便就好。為了不讓大家眼花,藍牙發射器另外獨立出來表示 (藍牙RX – Arduino D11, 藍牙TX – Arduino D10腳位):

未命名

A0:電位計。A1:光敏電阻

螢幕快照-2014-10-30-上午12.41.36

TX: Arduino D11, RX: Arduino D10

 


App Inventor 端程式:

在 Clock.timer 事件中,則是先用 BluetoothClient.ReceiveText 指令,如果讀到’a’,就接續讀取後面兩筆資料,這就是 A0 腳位的數值。反之如果是 ‘b’ 就是 A1 腳位。
螢幕快照 2015-04-05 上午1.11.20
接著在Clock.timer 事件最後將這兩筆數值(value_A0, value_A1) 顯示於 Textbox,並且用這兩筆數值來控制 Canvas 上面的小飛機移動,快點來玩雷電遊戲吧!
螢幕快照 2015-04-05 上午1.11.29
2015-04-05 01.15.40
因為資料傳輸過程中難免會遺漏,因此我們都是先抓到火車頭(就是’a’ 與 ‘b’),確定這是一筆新的資料開頭之後,再去讀取數值,否則可能會發生數值亂跳的情形噢。另一方面,App Inventor 在藍牙傳輸的延遲狀況較明顯,請注意喔

Arduino 端程式如下,我們把 A0 腳位的資料用 ‘a’ 作為標頭,由於資料長度大於 1 byte ( 2的8次方),因此需要用到 2 bytes 才能把 A0 的數值範圍 (0~1023) 涵蓋進去,因此 Data[1]~Data[2] 就代表A0 腳位的資料,Data[4]~Data[5] 就是A1 腳位的資料:(Data [0] = ‘a’, Data[3] = ‘b’ 這兩個火車頭別忘記囉~)
#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial I2CBT(10,11); // TX:10, RX:11
byte serialA;

void setup(){ 
  Serial.begin(9600);
  I2CBT.begin(9600);
}
 
void loop (){
    byte Data[6];
    byte cmmd[20];
    int insize;
    int x=analogRead(A0);//read sensor value
    int y=analogRead(A1);//read sensor value
    serialA=I2CBT.read();
    Data[0]='a';
    Data[1]=x/256;
    Data[2]=x%256;
    Data[3]='b';
    Data[4]=y/256;
    Data[5]=y%256;
     Serial.print(x);
     Serial.print(" , ");
     Serial.println(y);
 
     if (serialA == 49){
         for(int j=0;j<5;j++)
         I2CBT.write(Data[j]);
         serialA=0;
      }
  delay(100);
}

About CAVEDU 阿吉 - 雜工 (2521 Articles)

CAVEDU 教育團隊 打雜

Contact: Website

44 Comments on [雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機

  1. 我藍芽連線後視窗會有一個Error515:Notconnected to bluetooth device.但是我有連上藍芽他卻一職跳出這個 有接收到值 但是 第二筆353都不會變

  2. 是意圖,麵包板上的紅線是不是接錯地方了……

  3. 請問同時偵測兩筆資料為何第二筆會跑不太動?

    • 您好,資料傳送的過程中本來就容易遺失,無線傳輸(Wifi, BT)尤其明顯。您可以把兩筆資料組合成同一筆之後送出,犧牲精確度來換即時性。例如我可以把 0~ 1023 / 10 之後變成 0~100 左右的範圍再送出去,App Inventor 接到這個數字之後再 x 10 就好了

  4. 我想用arduino板子上的A0去接到紅外線測距的電路上,讓APP可以跑出測距的數值,請問APP INVENTOR跟arduino的程式要如何去做修改呢?

    • 您好,接在 A0 的話,只要確認您所用的紅外線測距模組回傳數值範圍,如果是與電位計一樣介於 0~1023 之前的話,App Inventor 端程式完全不用修改。您可以先從 Serial Monitor 中看看紅外線測距數值是否正確,正確的話就可以直接發送

  5. 我想請教,如果我是要傳在arduino裡計算好有小數點6碼的資料,arduino程式跟 ai2的程式該怎麼改,謝謝。

  6. 請問這個實驗,有範本可以下載讓我們去研究及修改嗎

  7. 我自己寫了一個Arduino 讀取電壓的程式 那我要怎麼把我讀到的值回傳至APP作顯示 這個值有小數點

  8. 我已經可以傳i值了,可是電壓是i*5/1024那我這個要怎麼寫出來APP才可以做顯示

  9. 第二筆資料跑不動,可不可以再說明要怎麼解決?
    有點不了解,謝謝

  10. 我找到問題點了,ARDUINO的程式有錯
    if (serialA == 49){
    for(int j=0;j這行錯了
    I2CBT.write(Data[j]);
    serialA=0;
    }

    是6不是5

  11. 為什麼在Serial Monitor有A0跟A1的數值再跑
    但是手機APP連接到藍芽後 螢幕中的數值卻沒有動靜

  12. 想請問一下,
    若我Arduino端要回傳至手機的是”溫溼度感測器”的數值,
    可直接使用此篇的程式碼(AI2跟Arduino)嗎?或是需要更改呢?

    感謝幫忙!

  13. 請問如果我資料的”整數int”如果是小於256是不是就可以直接傳?
    數字如果大於256才要/256嗎?

  14. 不好意思沒事了~~~看到上面提供了範例檔
    另外想問 傳送讀取數位的資料一樣也是要
    Data[3]=’b’;
    Data[4]=y/256;
    Data[5]=y%256;
    這樣嗎?

  15. 請問一下我想把溫濕度感測器的值傳到手機的話,用上面的app程式碼和arduino的程式碼的話需要修改嗎?

  16. 請問一下 按上面回復的 數值超過255 才需要拆封包處理
    可是溫溼度傳感器 的數值 好像沒有 大於255
    可是我在測試的時候 必須要/256 才會顯示正常數值

    另外 請問一下 %256 的用意是?

  17. 如果我要傳送溫度和濕度分開傳,我該如何打

  18. 您好請問如果要接收四筆資料呢?A0 A1 A2 A3 需要怎麼更改呢?

  19. 想請問一下,這個程式可以接pluse sensor 和Neo 6M GPS嗎?因為一樣是兩筆資料透過HC-05回傳的,所以不知道這程式能不能用?

Leave a comment

Your email address will not be published.


*