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

本篇將教導大家如何使用手機讀取Arduino上類比腳位的數值,在此我們接上的是旋鈕式可變電阻。實際上可連接的元件不只可變電阻,所有的類比式感測器例如光敏電阻、熱敏電阻等都可以這樣使用!

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

       [雙A計畫] 藍芽模組(HC05/06)常用指令教學

[雙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 手機

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

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

先來看影片吧:

[youtube=”https://www.youtube.com/watch?v=Xlk_2cYytFI&feature=youtu.be”]

範例程式請點我下載(App Inventor中文學習網檔案庫)  App Inventor 2檔名:ReceiveDatafromArduino.aia

材料清單:

1 Android系統智慧型手機

2.Arduino相容開發板 (本文使用 Arduino MEGA2560)

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

4.麵包板

5.1個 1K歐姆可變電阻

先由下圖將藍牙及可變電阻接上Arduino (藍牙RX – Arduino D11, 藍牙TX – Arduino D10腳位)

 

STEP1:App Inventor 編寫藍牙訊息接收程式

畫面元件很簡單,點選 BT List 之後,會顯示藍牙配對裝置清單,點選您已經配對好的藍牙裝置之後,Arduino的類比腳位資訊就會顯示在畫面中央的 TextBox 上。

這邊要注意的地方是要將Clock1的TimerInterval更改成10,也就是每 0.01秒更新一次。這麼一來才比較不會發生漏抓Arduino 發出來的訊息


螢幕快照 2014-04-02 下午11.35.50     
 4

程式說明:

本段程式重點在於手機在讀取Arduino訊號時,並不是直接向Arduino取得資料,而是採用間接的手法。先讓手機丟出一個訊號(本範例為發送49)。Arduino在等待接收到此訊號後,才會將感應器的數值以封包的形式傳送給手機。在第二個if後就是手機解讀Arduino所傳送過來的封包,並顯示到手機上。

請注意在程式初始化時我們把 Timer 關掉了,不然還沒有藍牙連線成功之前就發送藍牙訊息的話,會一直顯示錯誤畫面。

text 文字變數是用來接收 Arduino 送來的標頭,如果是’a’ 就代表這是一串封包的第一個,可以開始讀取了。

螢幕快照 2015-06-05 下午1.04.24

 

在 Clock.Timer事件中,會先送出一個49的數字作為確認碼,Arduino 接收到這筆資料之後就知道要開始傳送資料了。由於 Arduino A0 腳位的數值範圍是 0~ 1023,但是封包卻是以 8 bit (一位元組)為單位,因此要把數值以 8位元為單位來組合,並存入 number 變數中,就能順利將數字還原了。最後將 number 變數值顯示於 TextBox 中。

螢幕快照 2014-04-02 下午11.36.20

 

在斷線時,關閉計時器與藍牙連線,並讓畫面恢復到初始狀態

螢幕快照 2015-06-05 下午1.04.29

STEP2:Arduino 程式碼

#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial I2CBT(10,11);
byte serialA;
void setup(){

  Serial.begin(9600);
  I2CBT.begin(9600);
}
///////////////////main///////////////////

void loop (){
    byte Data[3];
    byte cmmd[20];
    int insize;
    char str[256];
    int i=analogRead(A0);//read sensor value
    serialA=I2CBT.read();
    Data[0]='a';
    Data[1]=i/256;
    Data[2]=i%256;
    sprintf(str,"i: %d 0: %d 1: %d 2: %d",i,Data[0],Data[1],Data[2]);
     Serial.println(str);
     if (serialA == 49){
         for(int j=0;j<3;j++)
         I2CBT.write(Data[j]);
         
         serialA=0;
      } 
  //delay(100);    
}
App Inventor receive Arduino analog status

 

 

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

  1. 新手! says:

    請問手機端藍芽可以在程式開始自動去連結它嗎?不需選取而自動去抓,請問程式要怎麼改呢?

    • CAVE阿吉 says:

      您好,請在 Screen1.Initialize事件中使用 BluetoothClient.Connect (藍牙位址)就可以了。藍牙位址 00:16:53:xx:xx:xx

      這樣就會在程式一啟動就會去對指定藍牙裝置連線。

    • CAVE阿吉 says:

      您好,part3 中就是您要的。只要確定 Arduino 要傳輸的是怎樣的資料(例如類比或數位感測器值)就能透過藍牙丟出去給接收端(PC / 手機皆可)

  2. lu says:

    請問能否運用’序列部監控視窗’發送數位訊號,經由藍牙給手機數位訊號呢??須從哪邊作更正?

    • CAVE阿吉 says:

      請問您的”序列埠視窗”是指 Arduino 的 Serial Monitor嗎? 是說要從 Serial Monitor 輸入資料之後讓 Arduino 透過藍牙送給手機嗎?

      如果是這樣的話, 就是用 Serial.read 來讀取資料之後, 再透過另一個 Serial (通常是命名為 Serial1) 的 write指令走藍牙把資料送出

  3. 手汗 says:

    使用過後,判別會有錯誤
    Sketch uses 6,418 bytes (19%) of program storage space. Maximum is 32,256 bytes.
    Global variables use 504 bytes (24%) of dynamic memory, leaving 1,544 bytes for local variables. Maximum is 2,048 bytes.

    avrdude: stk500_getsync(): not in sync: resp=0x00 不懂他的意思 請幫忙解答。

    • CAVE阿吉 says:

      您好,會出現”avrdude: stk500_getsync(): not in sync: resp=0×00″這串資訊,是代表 serial port 被占掉了。請將藍牙發射器拔掉之後再傳程式,這樣應該就沒問題了。

  4. 王柏勛 says:

    請問手機若沒事先將藍牙功能打開,APPINVENTOR是否有辦法偵測到手機的藍牙沒開,並詢問使用者是否要開啟藍芽功能呢?若選擇”是”則自動開啟手機的藍牙功能,謝謝啦!!

  5. 手汗 says:

    很感謝上一個問題的解答。
    現在連接藍芽後,APP中Label並未有資訊顯示,不知道問題出在哪裡?!可否詳解

    還有不事先啟動藍芽裝置,能否自動開啟以及配對?
    看過你回復的內容,但也不明白更改的確切位置在哪?

    謝謝你的幫忙!!

    • CAVE阿吉 says:

      您好, 如上個問題的回答. 我們的程式都是ok的, 剛剛又測過一次…

      無法自動開啟藍牙也無法自動配對, 藍牙配對一定要手動(因為要輸入配對碼). 但是自動連線是可以的, 寫在 Screen.Initialize 事件中就可以了. 但不建議這麼做, 因為有可能在任一項硬體尚未ok之前就連線的話, 這樣很容易 error. 請參閱 BluetoothClient元件說明.

  6. Bell Chiang says:

    你好
    請問我要如何在兩個頁面持續連接同一藍芽
    例如 我已經在頁面一連好藍芽點選頁面二的時候
    藍芽不用重新連線 可以直接繼續執行動作呢?

    • CAVE阿吉 says:

      把 bluetoothClient.connect 指令放在 Screen.Initialize 事件中就可以了. 但不建議這麼做, 因為有可能在任一項硬體尚未ok之前就連線的話, 這樣很容易 error.

  7. 一二三 says:

    很感謝上一個問題的解答。
    但是我還有另一個問題,就是連接藍芽後,APP中Label並未有資訊顯示,不知道問題出在哪裡?!可否詳解,謝謝!!

    • CAVE阿吉 says:

      請問您 Arduino 端的程式有執行嗎?如果確認有安裝的話,請按 Arduino 上的 reset鍵看看?有可能是連是連了,但Arduino上的程式不對或是根本沒有執行

    • CAVE阿吉 says:

      您好,接上可變電阻的用意是可看到數值變化(實際上就是類比腳位上的電壓)。不接東西也一樣會有 500 多的數值在微幅跳動。A0~A5都是一樣的喔

  8. 阿靖靖 says:

    感謝上次的回答,我還有一個疑問,那不接可變電阻的話,A0有要接什麼線到哪裡之類的嗎??
    還是什麼都不用接呢??

    • CAVE阿吉 says:

      您好,什麼都不用接就會有數值(代表該類比腳位上的電壓高低),可能會有微幅跳動,但大致上是不會動的。接上可變電阻是讓我們能清楚看到其電壓變化狀況。

  9. 鬍子 says:

    請問一下,如果我有四個開關分別 插入 A0~ A3 Arduino的 (ANALOG IN)然後要給android 訊號像是 0000~ 0001 二進制的話 Inventor要怎麼修改呢?

    • CAVE阿吉 says:

      您好, 開關是數位裝置, 不能接在類比輸入. 您可以將其開關狀況組合成一個 byte。例如開開開關 = 1110, 關關開開 = 0011. 再把這個 byte 送出就可以了. 這樣一個 byte 就能表達八個開關的狀態.

    • CAVE阿吉 says:

      您好, 以光敏電阻來說的話(它沒有極性所以不會接反), 一邊接地, 一端接到A0 (或任何類比輸入腳位). 它本身受光照射時就會改變自身的電阻值, 這時就能使用 analogRead() 來讀取了.

    • CAVE阿吉 says:

      您好, 拿可變電阻來說的話, 由於它沒有極性, 所以一端接 GND, 一端接到A0 或任一個類比腳位.

      光照狀況改變時, 它本身的電阻值就會變動(變化效果視元件規格與品質而定), 其他的類比元件也是相同的概念. 這時就能用 analogRead(A0) 來讀取了.

  10. 靖元 says:

    請問一下,如果Arduino傳的只是數字,例如: 1、100、120.2145 這樣的數字,可以不使用封包的傳送方式直接傳送給手機嗎?

    還是一定要用封包形式?如果是一定要的話,可以解釋一下所謂的解封包的原理嗎? 感恩!!!!

        • CAVE阿吉 says:

          您好, 不同screen的程式碼無法相連. 因為一個個Screen的程式碼都是獨立的. 但是傳值是可以的, 請到Control 指令區找到 open another screen with start value 指令, 就能傳值給另一個screen. 但請注意切換screen 功能無法使用模擬器, 一定要用實體手機.

  11. 大鬍子 says:

    您好,如果我換成4個按鈕呢? 要怎麼個接法? 那我程式也需要打多執行緒嗎? 還是用while loop? ((到手機上面會顯示 0001 ~ 0010 之類的

    • CAVE阿吉 says:

      您好, 不用多執行緒(Arduino 我記得沒辦法真的做到多執行緒). Arduino 的 loop() 本身就是無窮迴圈, 所以不用再加 while了. 4個按鈕接在數位腳位, 您可以將其開關狀況組合成一個 byte。例如開開開關 = 1110, 關關開開 = 0011. 再把這個 byte 送出就可以了. 這樣一個 byte 就能表達八個開關的狀態.

  12. says:

    想問 我把可變算成按鈕 我是從arduino送出資訊給手機,當我按鈕按下去 我手機要怎麼接受到arduino資訊 arduino那邊是8位元的封包

    • CAVE阿吉 says:

      您好, Android手機可以同時連兩台以上的 Arduino, 但同一片 Arduino 同一時間只能被一台外部裝置來藍牙連線. 因為 Arduino 在通訊上都當成 slave端. (就算Arduino上裝了兩片藍牙, 這樣在應用上也很奇怪).

  13. 陳祐祐 says:

    你好 我想請問一下AFTER PICKING 與 BEFORE PICKING在哪裡?
    我在 BUTTON裡面 找不到這兩個功能 只有 CLICK….之類的!

    • CAVE阿吉 says:

      不懂您的意思, 封包是傳送資料的格式, 迴圈是定期送出資料的方法. 兩者無關喔. 傳送到Textbox 的話, 就是去更新 TextBox.Text就可以了.

  14. 陳祐祐 says:

    請問一下! 我都照上面的輸入 但是我手機接收端 卻出現 (Error 515:Not connected to a Bluetooth device) 請問是哪邊出了問題呢!?

  15. YJW says:

    你好:我手機端也有 (Error 515:Not connected to a Bluetooth device)的情況發生,但是數值可以正確收到,但是錯誤訊息一直卡在那!!!

    • CAVE阿吉 says:

      您好, 如果可以正確收到數值就ok了, 有時候我們連樂高NXT機器人也有相同的狀況. 就先別理它吧. 因為 App Inventor 能做的藍牙設定並不多.

  16. 陳祐祐 says:

    我是手機程式碼部分都是照您上面打的,但是手機一進去就出現(Error 515:Not connected to a Bluetooth device) 當我關掉成程式時有時還會出現在上面。
    而我是有接收到(HC-05) 但 不知為何會變這樣…

  17. 阿銘 says:

    請問我在撰寫程式那找不到When BTList .BeforePicking的那個拼圖是甚麼原因,我是新手不好意思

  18. zoohk911 says:

    請問…如果想在同一個手機版面裏定時以0.01秒更新感應器的讀數, 第二個封包要如何修改?…試了很多次都不成功

    • 偉和 says:

      您好,在電腦端,一個位元組的資料是0~255,但是當資料傳送到Arduino時,它卻會將128~255的資料誤判為-128~-1,所以為了要看原本的數值才會加上256

  19. 陳祐祐 says:

    你好 請問 我已經下載範例使用 而在電腦ARDUINO上測試 有數值跑出 但使用手機卻沒有數值跑出來(已連線HC-05) 請問這該如何處理! 謝謝

  20. HeroandHoz says:

    請問我在第一個頁面寫好藍芽也連好切換至第二個頁面藍芽沒斷東西都不能傳出,寫在同一頁就能傳出。是換夜不能傳嗎?還是要寫特殊的東西?

  21. HeroandHoz says:

    請問Screen1.Initialize事件中換頁使用 BluetoothClient.Connect (藍牙位址)開啟自動連線,測式個10次只成功個4~5次要怎麼改善這個問題?

    • CAVE阿吉 says:

      hi, App Inventor 只要換頁, 藍牙就會斷線. 那您如果要在 Screen1.Initialize 就直接連線的話, 有可能因為硬體還沒有 ready 的關係所以會連線失敗. 我建議還是用 Button / ListPicker 手動連線比較好

  22. 阿銘 says:

    請問為什麼我照上面的Arduino程式打編譯的時候會出現
    sketch_may15a.ino: In function ‘void loop()’:
    sketch_may15a:25: error: ‘u2019a’ was not declared in this scope
    sketch_may15a:25: error: expected `;’ before ‘u2019’

    • CAVE阿吉 says:

      您好, 我剛剛直接從網頁複製本篇程式碼去編譯是正常的喔, 可否把您的錯誤畫面截圖或是把您的程式碼給我看看, 也許哪邊不小心漏了?

  23. sofuncoffee says:

    謝謝CAVE阿吉:
    我把I2CBT.begin(38400); //與藍牙發射器的鮑率為 38400改為預設的9600 I2CBT.begin(9600);
    配對也完成,手機也出現YFRobot的選項,點選已在手機安裝好的範例程式點選BTList,選擇YFRobot立即談彈出
    Runtime Error Need BLUETOOTH_ADMIN permission: Neither user 10076 nor current process has android.permission.BLUETOOTH_ADMIN
    end application
    有沒有辦法解決?

    • CAVE阿吉 says:

      您好, BLUETOOTH_ADMIN permission 是Android手機上對於藍牙的權限. 我曾經遇過某些型號的手機在執行App Inventor程式時無法進行藍牙通訊的狀況(但其實藍牙是好的). 這應該是 App Inventor 與藍牙之間的問題. 可能的話請換一支手機來測測看

  24. 陳祐祐 says:

    阿吉老師你好 想請問 一下 我打算用此程式 與 DHT11(官網給的程式碼溫度的部分) 去做結合 但卻不知要從何下手 麻煩阿吉老師 提點一下

  25. sofuncoffee says:

    謝謝CAVE阿吉5/15的回覆:
    依據阿吉指導參照http://coopermaa2nd.blogspot.tw/2012/07/config-bluetooth-baud-rate-w-arduino.html
    或使用http://coopermaa2nd.blogspot.tw/2012/06/bluetooth-module-configuration.html介紹的USB to TTL 的轉換器
    更改藍牙的設定—–下AT 指令時皆無文中OK的回應,而且新購的HC-05 BC-05皆如此
    可以幫我解惑嗎?謝謝!

    • CAVEDU 阿吉 says:

      您好,只要是長那樣的藍牙發射器,運作方法都是一樣的,所以沒有回應OK的話,請確認線是否有接好。
      或者如果您在臺北的話,也許可以找一天來敝公司。請先來電 02 2306 2900 確認公司現場有沒有人可以幫忙喔

  26. 阿明 says:

    您好可否請教 我鮑率已更改跟我藍芽模組相配
    tx rx設定腳位反覆測試
    但是數值仍是0可否提供解決方法

    • CAVEDU 阿吉 says:

      阿明您好, 數值仍是零有很多地方要考慮. 1. 配對了嗎? 2. ListPicker 點選之後有沒有出現對應的藍芽裝置名稱與位址? 3. 如果有, 發射器上的燈是否從閃爍變為一直亮著? 畫面應該會頓一下而非直接切換過去

    • CAVE阿吉 says:

      您好, ‘a’是作為訊號傳輸的起始位元, 因為在資料傳送中可能會遺失資料, 所以我們設定跟在 ‘a’ 之後的資料才是正確的. 這是常見的 handshaking 方法

    • CAVE阿吉 says:

      請問有先配對好了嗎? 點選 ListPicker 之後有出現您的藍牙裝置名稱嗎? 如果有, 點選之後, 藍牙發射器上的紅燈有從閃爍變成長亮嗎? 請檢查一下吧

  27. HeroandHoz says:

    手機程式拼圖我照拉
    Arduino 程式碼:
    if (serialA == 49){//判斷從手機接收到的訊號是否為”49″

    /* 傳送封包 */

    for(int j=0;j<3;j++)
    I2CBT.write(Data[j]);

    serialA=0;

    }
    這邊都沒收到是什麼問題?
    我藍芽是HC-06

    • CAVEDU 阿吉 says:

      程式都沒問題的話, 請檢查有沒有配對, 如果確認手機有和藍牙發射器配對的話, 請點選 ListPicker 之後有沒有看到這個裝置. 連線成功之後藍牙發射器的紅燈應該會從原本的閃爍變為一直亮著.

  28. HeroandHoz says:

    你好,Send1ByteNumber 發出去的49沒被arduino收到,只有255被發送。要怎麼處理?
    BytesAvailableToReceive()收到的都是0?

    • CAVEDU 阿吉 says:

      BytesAvailableToReceive() 如果都是0,代表通訊不太對噢。請檢查一下藍牙發射器的燈在我們從 App Inventor 端點選連線之後是否由閃爍變為常亮。另外鮑率是否正確?

  29. 阿銘 says:

    您好,我已經成功做出來了,可是還是想請教一下Arduino這段程式可以在講解得更清楚一點嗎,好比Serial.begin(9600);
    I2CBT.begin(38400); //與藍牙發射器的鮑率為 38400,這兩行程式的意思是?謝謝之前的回答喔:D

    • CAVEDU 阿吉 says:

      恭喜!! Serial.begin 是指 Arduino 與電腦 Serial Monitor 視窗的鮑率為9600. I2CBT.begin 則是 Arduino的藍牙發射器與App Inventor 的鮑率為 38400. 鮑率高低不是問題, 重點是要兩者一致, 否則會變亂碼

    • 偉和 says:

      若依然讀取不到數值
      1.請在確認線有無接錯:把Arduino 變成USB to TTL 轉換器檢查藍牙是否正常時,腳位對應為Tx→Tx、Rx→Rx;但在做通訊時則是Tx→Rx、Rx→Tx
      2.藍牙是否為「從機模式」:一般藍牙都可分為「主機模式」及「從機模式」。若是Hc-05藍牙,可切換主從機模式,若是其他型號的板子請確認是否為從機,若不是請更換藍芽晶片或者切換模式
      3.手機是否無法正確接收藍牙訊息:若是這樣請洽該廠商的技術人員

  30. says:

    您好 上敘的那篇 有看過 在於說 如果想將 測得的數據以封包式 經過藍芽 再傳回手機裡
    讓手機 去 解讀後 顯示其數值

    是不是就完全不一樣的寫法

    另外App Inventor 出來的程式碼 可以匯入到 Eclipse 或 JAVA 繼續使用嗎?

  31. 阿賢 says:

    請問 如果將此電組部份改成用DHT11 ,ARDUINO的程式碼部分需要改很多地方嗎?
    有看過上面的前輩回應 但 那個是與電鬧做連結的 我看不太懂如何將它改成與手機連結 傳遞溫度值 麻煩阿吉老師 謝謝

  32. 張張張 says:

    您好,我把您的inventor上面設一個sound,在arduino程式不更動的情形下,讓inventor接收按鈕類比資訊,如果inventor的clock計時到了,sound響起,我再用arduino上的按紐關閉inventor sound,這樣,在不做大更動的狀況下,以上功能是可以達成的?

    • CAVEDU 阿吉 says:

      您好, 可以做得到. 但是按鈕是數位的吧, 只是提醒一下. 就是透過 Arduino 按鈕是否壓下去控制 App Inventor 的 Clock.Timer enabled屬性,藉此來關閉sound. 不過 sound 概念上是短音效,所以應該是 clock.timer 去要求 sound 重複播放某個音效檔, 再透過 arduino 按鈕來關閉它喔

  33. 張博凱 says:

    老師你好,我嘗試用arduino發送一數字給手機,來關閉inventor程式,一直不成功,每次inventor計時器數到零的時候,不斷跑出false字樣,我很確定arduino沒有問題,能否請教inventor的部分

    • CAVEDU 阿吉 says:

      關閉 Inventor 程式應該就是 Control 指令區中的 close application 指令. 只要App Inventor 接收到某個數值, 就用這個指令來關閉程式, 這樣應該沒問題

  34. 阿賢 says:

    請問 我把https://github.com/RobTillaart/Arduino/blob/master/libraries/DHTlib/examples/dht11_test/dht11_test.ino#L21 此程式碼與本篇作結合,在本篇程式碼中加上了dht DHT,更改了讀取的腳位,也將溫度的部份貼過來這,最後寫入程式後使用serial monitor 去檢視發現 有溫度值 ,但多出一個3百多的數字,最後用此範例的APK檔去做測試 發現TEXTBOX1 沒有數字,請問是哪裡出了問題?

  35. 信鴿 says:

    請問我全部都正常,藍芽接收器上也有恆亮紅燈,開啟arduino monitor也有顯示出數值,但是手機就是一直顯示0,請問是哪裡出了問題?

    • CAVEDU 阿吉 - 雜工 says:

      您好,是類似像兩個可變電阻這樣嗎?您可以輪流發送(前面加上對應的判斷字元來避免讀取錯誤),或是把兩筆資料組合成一個整數之後再送出去(位元左移的概念)。

  36. 小穎 says:

    請問一下 如果要接收G-sensor 三軸的訊號 Arduion的程式編碼跟inventor的程式 要如何改 可以大約跟我說一下嗎 感謝老師

    • CAVEDU 阿吉 - 雜工 says:

      您好,概念是一樣的,但要先請問您可以在 Arduino IDE 的 Serial monitor 中看到 G sensor 數值了嗎?不論您使用的是哪一款,應該都有範例程式可以用。再結合本文程式碼應該就可以了

  37. Howard says:

    您好, 我使用HC-06模組的時候一切正常
    但是我換成HC-05的時候手機的TEXTBOX就不會跑出值了?
    我有把HC-05設定成Slave
    Arduino的code都一樣
    請問是什麼問題呢?

  38. 蕭群逸 says:

    老師您好,我想下載您的範例程式,但是點進去的網頁都顯示”找不到頁面”,裡面的檔案只有”AppInventor_Arduino.rar.1405957231417″可以下載,想請教老師關於範例程式還有哪裡可以參考。

      • 蕭群逸 says:

        謝謝老師的回答,我想再請教一個問題:如果我想從arduino傳送第二筆資料(資料為1,2,3…之類的),大概的步驟可以如何操作?
        目前我的作法是:
        1. 在Arduino新增一DataNum[ ]陣列放資料,再設if( ) 和 for( )迴圈來放新的陣列,條件為(serial == 48)。
        2. 在App inventor我試了在Clock1裡面,依樣畫葫蘆疊了跟上面一樣的積木。一開始傳送49給aduino後開始傳送Data[ ]陣列,傳完之後,接下來再傳送48給arduino,之後再傳DataNum[ ]陣列。
        3. 之後在app上的部份,兩個textbox都跑得不太順,請問這是必然的嗎?

        • CAVEDU 阿吉 - 雜工 says:

          您好,請參考這篇吧,http://wp.me/p3T9Qk-4b7。可以從 Arduino 端依序發送兩筆資料給 App Inventor。lag 是一定的,畢竟 App Inventor 的程式會比較肥胖,您可以考慮將兩筆資料組合成同一筆數值之後,做為單一數值送出。只是這樣可能會為了組合而犧牲一點精確度喔

  39. 奕君林 says:

    老師您好 您曾說Android手機可以同時連兩台以上的 Arduino,那我想從一塊Arduino讀取類比值後經由手機再透過藍芽傳給另一塊Arduino,這可以做到嗎??有相關文章可以參考嗎

    • CAVEDU 阿吉 - 雜工 says:

      您好,這樣是可以的喔。只要在App Inventor 程式中用到2個BluetoothClient元件就可以用藍牙連到兩片Arduino。之後再把這兩個手機程式組合起來就好,Arduino端程式應該是不需要修改才對。

    • CAVEDU 阿吉 - 雜工 says:

      您好,可以的,您可以把兩筆資料分別送出,例如先送data1 再送 data2。或是把兩筆資料組合起來,例如兩筆資料的範圍都是0~100的話,可以用 data = data1 * 100 + data2 (類似位元左移的概念)

  40. 星空 says:

    老師您好 我想要利用ARDUINO傳送(經由藍芽)類比訊號至手機作分析、示波等功能。想請問一下 是否有提供ANDROID的程式資訊當作參考範例修改。

  41. 彥余 says:

    您好:
    請問有辦法直接連接外部藍芽裝置例如藍芽耳機(不透過Arduino)
    將藍芽麥克風的訊號傳到APP 顯示在TEXT BOX上嗎?謝謝!

  42. Hornica says:

    您好,請問我做遠端開電燈及回傳電壓值兩個功能,但一個是從手機下指令給arduino動作(開燈),另一個是從arduino回傳值側到手機(電壓值)
    這兩個功能分開做都可執行,但在同一個程式裡就不能執行了,請問是什麼問題?謝謝!

  43. 阿賢 says:

    請問如果說 將可變電阻換成2.3個溫度感測器,這樣藍芽有辦法一次傳輸嗎? 如果可以那該如何下手? 謝謝

  44. Floris says:

    您好 目前遇到的問題是 Arduino monitor 上面一直有200~400內的數值一直跳 手機APP沒辦法接受我monitor傳的資料..
    請問是甚麼問題呢? 麻煩您了

    • CAVEDU 阿吉 - 雜工 says:

      monitor 傳的資料?這份程式是把 Arduino 的 AO腳位狀態(現在接上了電位計)透過藍牙傳給Android手機。您看到的 200~400 的值應該是正常顯示的結果,轉動電位計應該就能看到數值變化

  45. 胡智勛 says:

    你好 我想請問 我們做了一個 有關藍芽的APP 在第一頁 做連線的動作 在選擇要的動作跳到第二頁 但是只要一跳到第二頁 就顯示錯誤了 要怎麼讓第一頁跟第二頁 的藍芽是可以相通的 謝謝

  46. AMY says:

    請問我們藍芽有亮紅燈,app也連的到藍芽,但在TEXT BOX一直沒出現數值,還可以輸入文字,是哪一部分出問題,謝謝

  47. Lemon says:

    請問我傳值透過com port來看Data[2]數值,怎是出現【a..】呢??
    還是需要把他去轉數值??
    如果是使用android ADK來做的話 該如何去把那個數值轉成正確的數值??

  48. Floris says:

    您好 傳輸值部分問題已解決 目前想要將脈搏與含氧量感測器透過藍芽連結傳輸檢測的資料,可是在Arduino Code中,我打入
    #include
    #include
    #include
    #include
    卻無法進行編譯!
    出現以下訊息:
    Arduino: 1.0.6 (Windows 7), Board: “Arduino Uno”
    SoftwareSerial\SoftwareSerial.cpp.o: In function `__vector_5′:
    D:\arduino\arduino-1.0.6\libraries\SoftwareSerial/SoftwareSerial.cpp:319: multiple definition of `__vector_5′
    PinChangeInt\PinChangeInt.cpp.o:D:\arduino\arduino-1.0.6\libraries\PinChangeInt/PinChangeInt.cpp:163: first defined here
    大概是指無法包含兩個函式庫?! 請問是否有辦法解決呢 麻煩您了

  49. smile says:

    你好 ! 請問 !
    使用範例按照正常程序下執行,手機連結藍芽模組從閃爍狀態變成(每秒閃兩下),手機接收不到數值原因?
    hc05藍芽鮑率為9600,是否程式碼改為I2CBT.begin(9600)??

  50. smile says:

    你好!請問!
    我藍芽無法連線,有解決方法嗎?
    藍牙發射器上的紅燈目前每秒閃兩下,我在各大網站上尋找相關問題…
    都找不出解答,想請大大教我如何解決HC-05關於連線問題…
    懇請大大,教教我 , 謝謝大大!

  51. SUPER-YOYO says:

    您好~請問一下:
    如果把PART1(LED開關)與PART3(接收類比)兩個合在一起,arduino在接收藍芽傳回來的資料時,是不是會衝突?
    PART1中的『Serial.print(cmmd[i]=char(I2CBT.read()))』與PART3中的『 serialA=I2CBT.read()』
    前者是為了讀取Turn ON/OFF傳回來著值,後者是為了判斷arduino與手機是否一樣的值才傳值到手機的對吧~
    可是這樣測試下來好像就衝突了,改怎麼處理呢?
    跪求解答囉!!!

    • 偉和 says:

      您好 有幾種方式:在手機中設定切換模式切換成讀取模式或者控制模式;或者利用封包第一個字元讓ARDUINO決定要執行哪個部分

  52. CHEN says:

    您好
    順便說一下傳值好了
    基本上資料庫TAG名稱相同,可以在不同頁面收到,但是必須要相同的TAG名稱

  53. John says:

    你好,請問我想做藍芽控制紅外線動作感測器,並且偵測到時,會在手機的Lable上顯示”Danger”,但是lable卻毫無動靜? 謝謝,打擾了。

  54. SUPER says:

    您好~請問一下:
    如果把PART1(LED開關)與PART3(接收類比)兩個合在一起,arduino在接收藍芽傳回來的資料時,是不是會衝突?
    PART1中的『Serial.print(cmmd[i]=char(I2CBT.read()))』與PART3中的『 serialA=I2CBT.read()』
    前者是為了讀取Turn ON/OFF傳回來著值,後者是為了判斷arduino與手機是否一樣的值才傳值到手機的對吧~
    可是這樣測試下來好像就衝突了,改怎麼處理呢?
    跪求解答囉!!!

  55. 凌先 says:

    您好~請問一下:
    已下載執行part3,arduino是Uno,但是與手機是無法連線,(有先配對,和試過其它arduion和anduriod(AI2)控制LED亮滅,是okay的GOTOP出的)
    若可以,你可以給我aia檔,謝謝!
    Runtime Error
    Need BLUETOOTH_ADMIN
    permission: Neither user 10094 nor current processhas android.permission. BLUETOOTH_ADMIN.

    • CAVEDU 阿吉 - 雜工 says:

      您好,這個問題應該無解。因為App Inventor 在某些 Android 裝置上會無法打開藍牙的權限(BLUETOOTH_ADMIN)。如果可以的話,有辦法換一台Android裝置來試試看嗎?

      .aia 與 arduino sketch 等原始檔在文章中就可以下載囉

  56. smile says:

    大大你好 !!
    我想請問1個問題 !!!
    如果我想從已寫好的程式範例中LCD上顯示的數值,直接將數值透過藍芽傳送到手機中。
    程式碼該如何撰寫??? 請大大指導指導 !! 謝謝大大 !

  57. Tzuyu Lin says:

    請問一下Arduino程式,關於我在上面接了A0與A1倆個接腳,分別從手機端發送一組訊息給A0或A1來啟動讀取訊息,
    但是這段在執行上有些問題,我是先在Arduino程式內寫了收到來自Android端一個訊息後,就發送在A0上讀到的訊息給Android,
    然後就關閉A0的讀取,直到第二個接受來自Android端第二組訊息後才啟動A1的讀取,然後資料就變成拼命送過來….
    我Android來不及接受整個數值…亂套了.

  58. smile says:

    我使用的板子是 arduino uno & HC-05 藍芽
    參考Part3 ,這是讀取類比訊號數值再經由藍芽傳送到手機APP( 數值是 0 ~ 1023 ),
    該怎麼修改藍芽 code 可直接經由我寫好的溫度數(ex. 36.22 °C )值發送數值到手機顯示呢? ( 懇請大大指導一下 )
    ( 我只想顯示溫度在手機上 只求溫度數值傳到手機上 溫度code我已完成 藍芽code把我頭搞大了 )
    https://www.youtube.com/watch?v=tZXBnaVVjwM ( 在手機上秀 出溫度 該修改哪裡 懇請大大 指導指導 )

    • CAVEDU 阿吉 - 雜工 says:

      您好,請問您是否可顯示 36.22 於 Arduino 的 Serial Monitor? 其實對於Arduino 來說,就是發送整數出去,所以數值來源沒有影響。如果您希望在 App Inventor 畫面上看到小數點的話,有個偷雞的辦法就是先把溫度值 x 10 之後再送出(或直接轉成整數),例如 362 實際上代表 36.2度。App Inventor 接收到之後再除以10就好囉

  59. leo says:

    您好 如果是要讓arduino回傳0跟1給android 需要在Arduino做什麼動作 >
    以及appinventor內只需收到Receivesigned1Bytes=0或1 做某些事情 即可 還是需要加上其他東西?

    • CAVEDU 阿吉 - 雜工 says:

      Arduino 去改 I2CBT.write(); 把裡面的東西換成一個變數或直接寫 1 or 0,然後每秒交換一次,例如 I2CBT.write(1); delay(1000); I2CBT.write(0); delay(1000); 這樣就可以。

      App Inventor 端的話,就不需要這麼複雜,直接去判斷收到的內容為 1 or 0 並執行相關動作就可以囉

  60. old says:

    大大你好 ! 請問 !
    app inventor 顯示數字方塊 是拖移哪個方塊鈕?
    是Lable 還是 Textbox ??
    還是其他按鈕?
    無論我怎麼寫 都跟範例上的結果都不一樣…

  61. Bruce says:

    ERROR 515:not connected to a bluetooth decive. 這個問題已經解決了
    我想問程式開頭的pre code 和結尾的code pre是做什麼的??

  62. sean3381212 says:

    ReceiveDatafromArduino.aia 這個檔案目前不見了
    可以和您拿一份嗎?
    我目前是將溫度感應器接上去
    在編寫手機端出了一些小問題 希望能修改你的程式來使用 謝謝

  63. CHEN says:

    請問一下 如果想增加傳輸距離 使用WIFI的部份,將數值傳至伺服器,再從手機端輸入IP觀看數值 可行嗎? 請問有範例嗎?

  64. mikola says:

    手機接收端和藍牙發射器(HC-06)已預先完成配對了,
    ListPicker之後也看到HC-06(但數值無收到)
    頻出現 (Error 515:Not connected to a Bluetooth device)
    和手機藍芽版本有關係嗎?還是哪裡沒注意到!?
    煩請協助,Thx!!!^^

  65. wen says:

    想請問一下,我把 ARDUINO的int i=analogRead(A0)這行,改成了 int i=digitalRead(7)就能收到數位值嗎?
    另外還請問,我連結配對藍芽後,安卓的手機會沒顯示東西。

  66. Amuro says:

    請問一下, 如果我一樣想將類比感應器數值傳送至手機, 但我用手機APP把感應器數值吉時繪製波形圖, 這樣該怎麼作呢?

  67. WEN says:

    想請問如果要接收數位值,arduino那端的程式要如何更改。 我使用範例程式配對藍芽成功後,我也選取了藍芽後,app會整個黑掉,請問是什麼原因??

    • CAVEDU 阿吉 - 雜工 says:

      數位資料的傳送方法是一樣的(應該說 I2CBT.write() 只管把括號中的東西送出去)。如果配對藍牙成功,但畫面會黑掉… 可否把您配對的畫面與執行畫面都給我看看呢?

  68. U332799 says:

    你好,看了你的教學受益良多!!
    照著你的教學實作後發現有問題,於是下載你的程式碼後,也出現一樣問題
    問題如下:
    可變電阻的值在Serial裡面是正常的(0~1023)
    但是在手機上的顯示變成 9 265 521 777 只有這4個數字
    不像影片中的,直接顯示Serial裡面的值,請問這問題點出在哪@@?

    感謝大大

  69. BWR says:

    不好意思請問
    再監控式窗看得到值從0~1023的改變
    可是在手機上就只有9 265 521 777四種數值而已

  70. JEFF says:

    阿吉老師您好,我想請問一下,有辦法將兩個由藍芽所讀取到的感測器的值共同傳遞至另一個藍芽中嗎?
    然後再由這個藍芽所讀取到的兩個值傳至手機端 (請問有範例可參考嗎)

  71. lovefish109 says:

    不好意思
    我想問 如果我在arduino 裝超音波感測器,
    然後從手機端接收到超音波測到的距離資料 要怎麼做封包和接收?
    謝謝

  72. Medic says:

    請問我的簡訊APP想要別傳過來10然後我的APP就要自動把它加10,請問可以嗎?麻煩阿吉老師給些方向 謝謝

  73. LYX says:

    你好 我所使用的藍芽模組是HC-06 主從模式也確定過是從機模式 程式也檢查過 但在測試時讀到資料仍舊無法回傳至手機 請協助謝謝

  74. 龍貓仙人 says:

    你好我想請教一下如果要接受arduino的回傳數值,我是想收5筆數值 我不知道要用哪個元件來做接收的動作
    另外還有一點就是 我接收出來的數值卻跟adruino的數值不同而且有亂碼 我該怎麼處理

    • CAVEDU 阿吉 - 雜工 says:

      您好, 五筆數值…工程有點大喔, 但還是一樣是序列通訊的概念。換言之,您可以輪流把這五筆資料加上標頭之後丟出去。Arduino 那邊則是用一個長度為6的陣列來依序接收並對應。不過這樣數值的 delay 會相當明顯

      順道一問,請問您這個範例有執行成功嗎?

  75. rabbit4632 says:

    我想請問一下 如果我Arduino輸出的資料是 P=數字 R=數字 Y=數字 然後我App inventor 2 這邊我設置三個Textbox 要個別抓取它們三個的參數 Blocks 要怎麼拉 因為我只會妳們這種全部都抓出來~~”

    • CAVEDU 阿吉 - 雜工 says:

      我不太懂您的意思,您希望 Arduino 丟出來的東西是三筆數字的結合?還是”P=數字 R=數字 Y=數字”?我建議前者比較好,您可以把接收到的值用 text 的 segment 指令來切開就好。或是用數學指令進行 “除法” 運算也可以。拿到正確值之後再用 text 的 join 指令組合即可。教學:https://www.appinvetor.tw/ai2_text

    • CAVEDU 阿吉 - 雜工 says:

      您好,請問哪些指令要包成副程式?要加入哪些功能?可否說明詳細一點呢?

      宣告另外的函式就像這樣:

      void haha(){
      digitalWrite(13,HIGH);
      delay(500);
      }

      之後只要用 haha(); 就可以呼叫這個函式了。當然也可以讓函式可以接受外部參數,例如:

      void haha(int time){
      digitalWrite(13,HIGH);
      delay(time);
      }

      當我們用 haha(300); 呼叫時,D13腳位(LED)就會亮起 0.3秒,您可以填入任何整數來控制這個函式

  76. 王者之怒葉慾剩 says:

    您好, 五筆數值…工程有點大喔, 但還是一樣是序列通訊的概念。換言之,您可以輪流把這五筆資料加上標頭之後丟出去。Arduino 那邊則是用一個長度為6的陣列來依序接收並對應。不過這樣數值的 delay 會相當明顯

    順道一問,請問您這個範例有執行成功嗎?

    答覆: 範例是有成功只是我不知道怎麼去做修改
    想問你是否可以教導一下小弟求求你 阿吉哥~

  77. 矯情王子 says:

    你好我想請問您一下有關app inventor2接收封包的部分 我是想接收血壓模組的量測值 血壓模組胞率115200 他是固定的不能修改 但是現在app完全沒顯示封包數值 我不知道是app的問題還是arduino問題希望可否留個信箱方便聯絡

  78. chen says:

    你好 你在影片中是透過旋轉可變電阻來控制數字大小
    如果我是要透過聲音來控制顯示的數字大小(聲音越大數字越大,越小則數字越小)
    請問程式部分該如何做更改或下手
    謝謝

  79. Anny says:

    我想請問一下
    如果是不想透過一些媒介如:Arduino和樹莓派來達到閃爍led
    而是直接透過手機藍芽聯結led燈呢?
    不知道您有什麼想法嗎?

  80. 莊書維 says:

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x4b

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x4b

    上傳到板子時發生問題。可行建議請見http://www.arduino.cc/en/Guide/Troubleshooting#upload。

    請問我上傳到板子卻發生這樣的問題 怎麼辦呢????

  81. 莊書維 says:

    你好,請問我用你這個arduino程式上傳到板子上之後
    用手機連接藍芽之後按BT List 連接之後
    一直跳出 “unable to connect. is the device turned on?”
    但藍芽接受器本來紅燈一閃一閃
    連接之後 紅燈變成持續閃
    應該是有連上才對啊 怎麼會發生這樣的問題??

  82. 學哥 says:

    哈囉請問為什麼我arduino程式和app都是從這裡直接抓下來用
    為什麼連結之後手機只會顯示7.263.519.775 四個數字
    我程式和app都是直接用的

  83. 小豪 says:

    你好 版本一 跟二有差別嗎 afterpicking beforepicking找不到 請指導一下 方便的話可以加個line交流一下

    • CAVEDU 阿吉 - 雜工 says:

      您好,兩者沒有差別,afterpicking beforepicking 都是 ListPicker 元件下的事件,就是在畫面最上方的 [BT List],他是 ListPicker 不是 Button,請下載 .aia 原始碼後在您的 App Inventor 中開啟即可。

  84. says:

    建置選項已變更,重建所有
    sketch_jun01a.ino:1:12: error: stray ‘#’ in program
    sketch_jun01a.ino:1:1: error: expected unqualified-id before ‘<' token
    編譯時發生錯誤

  85. 小豪 says:

    你好 我一直手機畫面一直跑不出數值 我在轉可變電阻arduino測試視窗會重0~1023 但是手機就是一直跑不出來 板子是HC-06

  86. says:

    你好
    我的狀況是這樣的
    我想做一個可以切換螢幕又保持藍芽連線的app
    可是Screen1順利連接後切換到screen2就失去連線 也用Isconnected檢查過了
    請問有什麼方法嗎

  87. tatachen says:

    若出現515錯誤 , 增加如下 :

    when Screen1 .lnitialize do
    最後面加上:set Clock1 . TimerEnabled to false

    when Disconnect .Click
    最前面加上:call BluetoothClient1 .Disconnect

  88. Zi-Xiang says:

    你好~
    Android端與Arduino端都直接下載你們的範例原封不動使用,
    腳位確定沒插錯、藍芽模組(HC-05)鮑率也都試過,
    但終究只能在序列埠上看A0的值,
    透過藍芽傳給手機一直沒辦法成功…只確定藍芽有成功連線但始終收不到數值。

    想先試試看I2CBT.write(1)傳給手機,
    但數據依然沒辦法顯示…

    想請問還有沒有更簡單的範例測試?
    例如:
    I2CBT.write(1),手機上顯示1
    I2CBT.write(0),手機上顯示0

    麻煩解惑了,謝謝~

  89. says:

    請問
    我想要當類比訊號>800 手機上面顯示:1、當被比訊號>600 手機上面顯示:2…..以此類推
    該怎麼做呢?

  90. wuinthehouse says:

    您好
    我想請問我都全部照做
    可是手機連接上藍芽後卻出現
    unable to write: broken pipe
    請問作者知道是大概出了甚麼問題嗎??

  91. Mick says:

    您好請問一下 您的block程式碼有出現textbox的指令 ,在Design介面卻是label而沒有textbox的方塊,是兩者都可以嗎??

  92. 乃瑞 says:

    你好,請老師指導如何 將0~1023轉換為電壓值顯示在手機上,將這些值利用AI2即時繪製成動態曲(折)線圖,就是時間與電壓值關係的圖表

  93. 阿雲 says:

    請問老師,我現在送一個晶片的波型訊號,給手機,APP有辦法判斷..那波型訊號的來源嗎? 舉例來說:我送 01010111111000011111 這個訊號, APP有辦法自己設定,判斷訊號中的0000當作APP數值的『小數點』來用嗎?

  94. ian says:

    請問如果arduino有裝 水位感測器 土壤溼度感測器 環境溫度感測器 那要怎麼把感測器的數值傳回手機呢

  95. 王大明 says:

    你好,請問可以反過來用這個方式,讓app inventor傳數值而不是單純字元到arduino嗎?
    真的很感謝你們這篇的教學,受益良多~

  96. owen says:

    您好,請問一下DHT11溫濕度serial Port顯示的溫溼度值,想要用手機app來顯示;但溫溼度值是數位訊號的話,那我該如何去做修改呢?

  97. jason says:

    您好 我用原程式碼 藍芽連接時 他是顯示成功但是手機卻接收不到值 一直顯示出0
    接腳跟程式碼以及app都是一樣的 但是一直都是顯示出0
    我用的是ky028
    有小改一些

    #include
    int sensorPin = A0; // select the input pin for the potentiometer

    int sensorValue = 0; // variable to store the value coming from the sensor
    byte bbb1;
    float i = 0;
    float fixtemp = 20.;
    int fixInput = 560;
    float fixedDegreeValue = 5.5;
    SoftwareSerial bbb(2,3);
    void setup ()
    {
    Serial.begin (9600);
    bbb.begin(9600);
    }

    void loop ()
    {
    sensorValue = analogRead(sensorPin);
    bbb1=bbb.read();
    if (sensorValue > fixInput ){ // ice cube
    // Serial.print(sensorValue);

    i = sensorValue – fixInput;
    i = i /fixedDegreeValue;
    //Serial.print(sensorValue);
    // Serial.print(” and i = “);
    // Serial.println(i);
    Serial.print(“Temperature = “);
    fixtemp = fixtemp – i;
    Serial.print(fixtemp);
    Serial.println(” C”);
    if( bbb1 == 49){
    bbb.write(fixtemp);
    bbb1=0;
    }
    }
    else if(sensorValue < fixInput) //thea cup
    {
    i = fixInput – sensorValue;
    i = i /fixedDegreeValue;
    // Serial.print(sensorValue);
    // Serial.print(" and i = ");
    // Serial.println(i);
    Serial.print("Temperature = ");
    fixtemp = fixtemp + i;
    Serial.print(fixtemp);
    Serial.println(" C");
    if(bbb1==49){
    bbb.write(fixtemp);
    bbb1=0;
    }
    }
    else if(sensorValue == fixInput ){

    Serial.println(" temperature = 20 C");

    }
    fixtemp = 20;
    delay(1000);
    if(bbb1==49){
    bbb.write(fixtemp);
    bbb1=0;
    }
    }

  98. 李振嘉 says:

    您好,請問這個例題若我需要把數值顯示的方式變成百分比,需要如何修改? EX:1000歐姆=100% 100歐姆=10%,謝謝。

  99. 李振嘉 says:

    您好,請問如果我需要把Part1與Part3的Arduino整合,要如何改寫,目前PART3的封包方式用==49之後會一直跑不出迴圈,試了很久還是沒辦法整合,手機程式方面是沒問題了。

  100. 王俊宏 says:

    您好 , 如果是用力敏感測器 那旋鈕那邊的現該如何接?
    怎麼改寫從藍芽設定一個數據值後藉由力敏啟動讓LED亮暗?

  101. Erik says:

    您好,我下載code安裝後,發現回傳值是不連續的,且是256的倍數,即0、256、512、768,請問可能是什麼原因呢?謝謝您喔!

  102. 求救 says:

    你好
    我想問一下要怎麼讓手機直接收到RFID讀取到的資料呢
    也就是說讓顯示在arduino監控視窗上的東西也顯示在手機上

  103. 求知 says:

    你好老師
    我想請問一下換成壓力感測器也可以嗎?
    因為我換成壓力感測器但數值不會顯示出來
    想請問要怎麼讓Arduino上的序列阜監控視窗的電壓數值透過這程式顯示在手機上?
    還是我Aruuino程式有問題所以才顯示不出來?
    想請教老師幫我解決
    下面是我打的程式 我主要是想透過藍芽模組把壓力感測器數值顯示在手機上
    #include
    #include
    #include
    #define STEPS 150

    int fsrData;
    const int fsrPin = A0;
    Stepper stepper(STEPS, 11, 10, 9, 8);
    SoftwareSerial I2CBT(12,13);
    byte serialA;

    void setup()
    {
    Serial.begin(9600);
    I2CBT.begin(9600);
    stepper.setSpeed(150);
    }
    void loop()
    {
    stepper_continue();
    fsrData = analogRead(fsrPin); // 將讀取到的數值轉為 0~1023 之間的數字
    Serial.print(“FSR value is:”);
    Serial.println(fsrData);
    }
    void stepper_continue(){
    byte Data[3];
    byte cmmd[20];
    int insize;
    char str[256];
    int i=analogRead(A0);//read sensor value
    serialA=I2CBT.read();
    Data[0]=’a’;
    Data[1]=i/256;
    Data[2]=i%256;
    sprintf(str,”i: %d 0: %d 1: %d 2: %d”,i,Data[0],Data[1],Data[2]);
    Serial.println(str);
    if (serialA == 49){
    for(int j=0;j<3;j++)
    I2CBT.write(Data[j]);
    serialA=0;

    }
    stepper.step(1000);//正半圈
    delay(1000);
    stepper.step(-1000);//反半圈
    delay(1000);

    }

  104. RunDog says:

    你好!請問”由於 Arduino A0 腳位的數值範圍是 0~ 1023,但是封包卻是以 8 bit (一位元組)為單位,因此要把數值以 8位元為單位來組合,並存入 number 變數中,就能順利將數字還原了。最後將 number 變數值顯示於 TextBox 中。”這段中的原理能更詳細的解釋一下嗎?

    如果直接透過Arduino的程式上傳到APP也一樣要用到這個原理嗎?

  105. 迷途的鳳梨海豹 says:

    請問一下,我手機藍芽已經有配對到了,但在BT Llist裡選完後卻出現Error 507:Unable to connect. Is the device turned on?
    請問這是為甚麼? 我該如何改進? 謝謝

  106. 迷途的鳳梨海豹 says:

    OH!! 不用了,我換台手機就可以了,雖然數值沒跑出來,但我自己研究研究,謝謝。

  107. 柏大 says:

    您好,我用arduino uno版子接HC-05藍芽模組,用app inventor寫一個程式在手機上,想透過肌電貼片產生訊號讓app動作,請問我該怎麼寫程式讓app抓到訊號呢?

  108. Tom says:

    你好,有沒有辦法做到直接從Arduino的Serial Monitor抓特定的資料,顯示在APP上呢?
    例如按下開始,Arduino會執行測試,從Serial Monitor會顯示
    Output A:12
    Output A:13
    Output A:14
    等等…

    那這些資料是我按下”開始”鍵才有的訊息,其他時間則無此資訊
    我想擷取Output A:”XX”後面的兩位數值
    因為我不是要偵測腳位,而是直接抓串列視窗裡的訊息,我該怎麼做呢?
    謝謝~~

  109. YAN says:

    老師你好,請問一下,如果我是溫濕度感測器,想要讓在手機上顯示感測到的溫度及濕度,那麼程式該怎麼寫,我照上面的做,數直都是好幾千,那數值應該不是溫濕度的。

  110. 王忠祐 says:

    請問一下如果我要用arduino做電壓表,然後我想在手機的APP上看到電壓應該怎麼做呢?(可以的話希望可以把arduino的程式和APP的程式都說明一下謝謝)

  111. Michael says:

    阿吉老師您好:
    感謝您們的教學,真得獲益良多
    學生發現
    在APPinventor 端上 使用的是 signedbyte -128~127
    而arduino 使用的是 byte 0~255
    如此解碼似乎有產生溢位的問題,是否應當把appinventor改成unsign byte呢?

    • 徐 豐智 says:

      Michael你好,有關負值的資訊,可以參考Appinventor的clock.time事件的積木,有針對回傳直小於0的處理方法。

  112. WUWU says:

    老師你好,我使用的是藍芽4.0和Android手機 ,再按了BTLIST之後沒有跑出藍芽的位址
    請問該怎麼改程式呢??
    因為我是新手,可以麻煩老師講的詳細一點嗎? 謝謝!!!

  113. WUWU says:

    老師你好,在請問一下,如果我在App Inventor裡 import => (BLE .aix file)
    然後將bluetoothClient改為BluetoothLE 這樣是否可行呢??
    我的板子是Arduino uno

    • 徐 豐智 says:

      這樣詢問有些模糊耶,你具體想哪些部分更改呢,Appinventor的BLE相關的文章你可以參考這幾篇看看,新的藍牙4.0建議直接使用新的方法做,這樣狀況會比較少。
      [App Inventor IoT] 使用BLE(藍牙4.0)傳送光感測器數值-&lt;a href=”http://blog.cavedu.com/programming-language/appinventor/app-inventor-iot-linkit-7697%E4%BD%BF%E7%94%A8ble%EF%BC%88%E8%97%8D%E7%89%994-0%EF%BC%89%E5%82%B3%E9%80%81%E5%85%89%E6%84%9F%E6%B8%AC%E5%99%A8%E6%95%B8%E5%80%BC/”&gt;連結&lt;/a&gt;

      [App Inventor IoT] 使用 BLE(藍牙4.0)控制伺服馬達-&lt;a href=”http://blog.cavedu.com/programming-language/appinventor/app-inventor-iot-linkit-7697%E4%BD%BF%E7%94%A8ble%EF%BC%88%E8%97%8D%E7%89%994-0%EF%BC%89%E5%82%B3%E9%80%81%E5%85%89%E6%84%9F%E6%B8%AC%E5%99%A8%E6%95%B8%E5%80%BC/”&gt;連結&lt;/a&gt;

      [App Inventor IoT] 使用BLE控制LinkIt 7697 LED燈-&lt;a href=”http://blog.cavedu.com/programming-language/appinventor/app-inventor-iot-%E4%BD%BF%E7%94%A8ble%E6%8E%A7%E5%88%B6linkit-7697-led%E7%87%88/”&gt;連結&lt;/a&gt;

    • 許 鈺莨 says:

      你好,如果以上Appinventor的部分都確認無誤的話,接下來要確認的是:
      1.檢查杜邦接線是否損壞
      2.Arduino的Baudrate和藍牙的Baudrate是否一致
      3.TX、RX是否有接反;Arduino的TX要接藍牙的RX,Arduino的RX要接藍牙的TX

  114. 阿三 says:

    不好意思,可以請你解釋下列程式的意思嗎?
    我是初學者,不太懂,謝謝
    byte Data[3];
    byte cmmd[20];
    int insize;
    char str[256];
    int i=analogRead(A1);//read sensor value
    serialA=BT.read();
    Serial.print(serialA);
    Data[0]=’a’;
    Data[1]=i/256;
    Data[2]=i%256;

    sprintf(str,”i: %f 0: %f 1: %f 2: %f”,i,Data[0],Data[1],Data[2]);
    Serial.println(str);
    if (serialA == 49){
    for(int j=0;j<3;j++)
    BT.write(Data[j]);

    serialA=0;
    }
    }

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *