[雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

續上篇 [雙A計劃] Part0:App Inventor 傳送訊號給 Arduino,使用藍牙本篇將簡單介紹如何用手機控制Arduino上的LED 亮滅,使用 digitalWrite() 來達成。

挖,我們的雙A計畫有好多篇呢,歡迎您一篇篇都看過喔

[雙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)

範例程式請點我下載(App Inventor中文學習網檔案庫)

材料清單:

1 Android系統智慧型手機

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

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

4.麵包板

5.1個220歐姆色碼電阻

6.1顆LED

先由下圖將藍牙發射器及LED接上Arduino (藍牙RX – Arduino D11, 藍牙TX – Arduino D10腳位)

bt

藍牙TX: Arduino D10 (RX)。藍牙RX: Arduino D11 (TX) 定義於I2CBT(10,11); 語法中

 

App Inventor 編寫簡易的藍牙訊息發送程式

畫面元件很簡單,點選 BT List 之後,會顯示藍牙配對裝置清單,點選您已經配對好的藍牙裝置之後,畫面中間的按鈕就可點選。反覆點選就會送出不同的字元給Arduino 來控制LED亮滅。

螢幕快照 2014-04-04 上午12.06.35

程式說明:

STEP1:在 ListPicker1.BeforePicking事件中,將 BluetoothClient.AddressAndNames指令為 ListPicker1內容,代表點選將其內容連結到手機的已配對藍牙裝置清單。
 
STEP2:在 ListPicker1.AfterPicking事件中,確認連線成功之後,設定相關按鈕為 enabled/ disabled。

螢幕快照 2014-04-04 上午12.07.05 

STEP3:

本段程式重點當按下ON按鈕時,手機會透過 BluetoothClient元件的 SendText 指令發送一個 ‘a’ 字元給Arduino,此時按鈕的字樣會變成 “LED Turn Off”;同理當按下OFF按鈕時,手機會發送一個 ‘b’ 字元給Arduino,此時按鈕的字樣會變成 “LED Turn On”。

最後按下 Disconnect 斷線按鈕則中止藍牙連線,並將個畫面元件回復到初始狀態等候下一次連線。如下圖:

螢幕快照 2014-04-04 上午12.07.18

Arduino的CODE

#include <SoftwareSerial.h>
#include <Wire.h>

int LED = 13;
SoftwareSerial I2CBT(10,11); //定義Arduino PIN10及PIN11分別為RX及TX腳位
//請注意Arduino的TX要接藍牙模組的RX, 反之亦然

void setup() {
  Serial.begin(9600);
  I2CBT.begin(9600);//bluetooth baud rate  
  pinMode(LED, OUTPUT);    
}

void loop() {
  byte cmmd[20];
  int insize;
  while(1){
    //read message from bluetooth
    if ((insize=(I2CBT.available()))>0){
      Serial.print("input size = "); 
      Serial.println(insize);
      for (int i=0; i<insize; i++){
        Serial.print(cmmd[i]=char(I2CBT.read()));
        Serial.print("\n"); 
      }
    }
    //根據所收到訊號執行對應動作  
    switch (cmmd[0]) {
       //讀取第一個字元
    case 97: //'a'     
      digitalWrite(LED,HIGH);
      break;  

    case 98://'b'
      digitalWrite(LED,LOW);
      break;
    } //Switch
  } //while
}
App Inventor light up Arduino LED

 

發表迴響

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

  1. 您好~這篇文章對我來說受益良多,非常的易懂!!

    所以我也參考了您的文章做了測試,但是碰到了問題:

    在app連接藍芽後點擊LED開關後,燈沒有亮滅

    在電路上與code上完全是參考您的

    也測試過變換arduino板和藍芽模組(鮑率有修改成該板數據)

    想請問說是否有遇到過此種情況?

    謝謝!!

    • 您好, 我們確定範例 code 是可以執行的 (因為我們也好怕誤導大家, 所以幾乎兩三天就重新從網頁上直接下載來執行一次). 只能請您試試看囉.

  2. 您好此程式碼運作後 提示錯誤
    sketch_may20a:24: error: stray ‘\’ in program
    sketch_may20a:24: error: stray ‘\’ in program
    sketch_may20a:29: error: missing terminating ” character
    sketch_may20a:39: error: stray ‘\’ in program
    sketch_may20a:39: error: missing terminating ” character
    sketch_may20a.ino: In function ‘void loop()’:
    sketch_may20a:24: error: ‘u201cinput’ was not declared in this scope
    sketch_may20a:30: error: expected primary-expression before ‘}’ token
    sketch_may20a:30: error: expected `;’ before ‘}’ token
    sketch_may20a:39: error: ‘u201cGet’ was not declared in this scope

    請問該如何解決呢 …

  3. 您好,我目前已下載好您所附上的app程式controlLED,Arduino的程式也燒錄成功,可以用serial monitor輸入a b來控制Arduino
    但在使用controlLED時,無法連接上裝置,顯示””Error 507: Unable to connect. Is the device turned on?”
    想請問是什麼原因呢??

  4. 您好,我現在點選配對之後app就沒有反應了! 不知道是不是我沒有設定ListPicker的問題? 我是直接下載那個app來用得 不知如何設定?

    • 您好 使用預設鮑率就可以使用了 也不需要接其他裝置 HC-06與HC-05最大差別是一個是單一模式(主機或從機) 另一個是主從一體

  5. 請問一下 Code跟APP 都照你的寫法做,可是監控視窗秀出來的都是
    input size = 1
    0 input size = 1
    0 input size = 1

    一直重複循環~,不管按亮或暗,請問這問題是出在哪?

  6. 您好
    請問在Arduino 的 Serial Monitor 顯示的 “a” 跟 “b” , 為什麼不是按一下 ,顯示一次, 而是一直吳線循環的顯示呢?
    謝謝

  7. 請問一下,我用的板子是 Arduino uno , 藍芽 是HC-05,藍芽也配對了,
    執行on跟off, 板子上的TX的LED燈會閃,但是LED燈卻沒有動作
    還有1個220歐姆色碼電阻,請問有用到嗎??

  8. 你好 請問我執行 Arduino 做確認跑完的時後下面框框跑出這段
    bytes.
    Global variables use 523 bytes (25%) of dynamic memory, leaving 1,525 bytes for local variables. Maximum is 2,048 bytes.
    該怎麼解決?

  9. 謝謝您的說明,Error 507問題解決了,但把程式Upload到Arduino時,出現以下訊息:
    sketch_oct08a:2: error: stray ‘#’ in program
    sketch_oct08a:2: error: expected unqualified-id before ‘<' token
    謝謝您用心的說明!!! 謝謝!!

    • 您好,有幾個地方可以檢查:1. 是否有上傳程式到Arduino 2. Arduino 是否有執行程式(Serial Monitor 要有東西). 3. 手機是否有與藍牙發射器配對(ListPicker中要看到這片藍牙) 4. 手機點選後, 藍牙LED有沒有變為恆亮

  10. 請問一下Q1 STEP1中的 “事件中”是如何去設定?
    Q2 在BLOCK中並沒有找到”call”的指令 是因為我沒設置STEP1嗎?

  11. 你好,請問為何我在執行程式時Serial monitor完全沒有顯示任何東西
    Android手機確定有連結上藍芽模組(HC-06,模組上的紅燈也從閃爍轉為恆亮),Baud Rate在Arduino程式碼中也設定了9600
    App Inventor的程式我用過自己寫的(比照此教學文章寫出) 跟文章所附的範例程式皆發生一樣的情形
    Arduino的程式是從這邊複製過去,只有修改Baud Rate為9600

  12. 想請問您,不是用ARDUINO模組是否可行,我自己已經做出 用藍芽串口可控制,現在想用APP取代串口
    也想請您可不可以提供設計頁面,謝謝

  13. 你好,請問藍牙連接上,每次按turnon,turnoff 板子上TX燈都會閃,但是LED不亮滅,怎麼回事monitor顯示
    input size = 1
    255 input size = 1
    255 input size = 1
    255 input size = 1
    255 input size = 1

  14. 你好,有個問題請教,我看到別的例子時?他們沒有用 SoftwareSerial 定義藍的鮑率,是用Rx/Tx來定義,但我嘗試是沒有反應,謝謝

  15. 請問一下 我的code全部都是複製大大的 但是LED卻不能亮 是否是因為appinventor不支援HC系列藍芽呢?
    小弟有試過 Serial monitor 但是還是空白

  16. sketch_dec29a.ino:2:12: error: stray ‘#’ in program
    sketch_dec29a.ino:2:1: error: expected unqualified-id before ‘<' token
    請問這是甚麼問題?

  17. 就是 小弟藍芽有連到(藍芽的燈有持續亮著,然後手機有配對到藍芽),但是arduino好像沒動作一樣 我LED登在收到藍芽後 我手機程式按下led on 沒有反應 不知道是哪裡出錯了

  18. 大大你好!! 因為這學期專題要利用 手機app inventor2來控制搭配藍芽連結ArduinoUNO控制方向燈,左閃爍跟右閃爍.
    目前Android手機APP Inventor 2做為控制器 以藍芽連結在ArduinoUNO上作為方向燈控制.
    有照大大的範例做成功LED亮跟滅. 想請教大大 APP的拼圖製作 和Arduino程式哪邊還要修改一下. 以手機APP經過藍牙控制Arduino控制方向燈左閃爍跟右閃爍.
    跪求大大幫助 感恩你

  19. 請問一下, 我有下載 這檔案apk, 安裝置手機上,但是 bt list ,作連接藍芽動作,整各畫面都會是黑的?類似當機
    我確認我有連接上,不然會出現 err507:……….相關字串,請問這怎回事,謝謝!!!!

  20. 不好意思我按bt list時候 出現
    Error 507:Unable to Connect. Is the device turn on?
    已經確認hc06上led恆亮 且我也沒按錯裝置…

  21. 請問我的手機配對完成後,BT_LIST也有出現我的藍芽模塊,但是點了連接之後沒辦法回到點TURN ON的那個畫面
    藍芽模塊連線後手機畫面就整個黑屏了,也沒有任何錯誤訊息。

  22. 請問
    sketch_mar16e.ino:1:12: error: stray ‘#’ in program
    sketch_mar16e.ino:1:1: error: expected unqualified-id before ‘<' token
    這錯誤在哪?

  23. 你好,有個問題請教,我下載APK 到手機之後安裝,但手機出現(Error 515: Not connected to a Bluetooth device),連接藍牙後也出現,不知是什麼問題,謝謝

      • 你好,但我已預先配對好,開啟APP之後出現(Error 515: Not connected to a Bluetooth device),是否我在 App Inventor 2 build app 的問題還是手機,謝謝

          • 你好,我在網上下載和你們都沒有問題,但我的有問題(Error 515: Not connected to a Bluetooth device),應該不是手機問題?謝謝

          • 您好, App Inventor 在少數的Android 上會無法取得藍牙權限(這不代表手機的藍芽是壞的), 如果可以的話, 請換一支手機交叉測試看看, 如果確定是手機的問題的話, 就只好請您換一隻了. 我之前有一隻 HTC 就是這樣

  24. 您好,我在自己新建專案實作藍牙控制時遇到問題,請問在Blocks下的When LED Turn On.Click do 的if then else 這個圖形方塊在app-inventor2裡我找不到說有什麼方法還是替代作法嗎??感恩,謝謝!!

  25. 您好
    我在複製Arduino的CODE的時候 發生編譯錯誤 可以請教您一下 為甚麼會出現以下錯誤嗎? 感謝你=ˇ=
    _01.ino:1:12: error: stray ‘#’ in program
    _01.ino:1:1: error: expected unqualified-id before ‘<' token
    編譯時發生錯誤

  26. 老師您好,我已購買您書籍(機器人卷) 學習後未能滿足需求,因此提問:

    直接藍芽控制繼電器程序怎麼寫?(不需要Arduino)
    發送16進位,繼電器代碼?

  27. 你好 請問您適用objective C去寫程式的嗎 如果是可以分享軟體嗎 別的軟體也可只要可以打程式碼就好 謝謝

  28. 想請問 現在我修改程式 使第九腳成為風扇的輸出 我藍芽已經與板子連線 傳值也確定的 但還是無法驅動風扇運動停止

  29. 你好,Arduino板子上TX燈會正常閃爍 但唯獨LED不會閃爍
    serial monitor 都是顯示255 input size=1
    我是使用hc05藍芽

    胞率38400和9600 都設定過了 就是沒辦法

    • 您好,這樣就要把 slider 的值(slider.thumbposition)透過藍牙傳給Arduino,Arduino 接到這些數值之後再去把 delay() 中的時間改掉即可。不過這樣程式等於要傳三筆數值,所以應該會比較 lag

  30. 你好 我先用手機藍芽和藍芽模組進行連線 然後於app端再進行清單選取 出現 error 507 unable to connect. Is the device turned on?
    請問這樣是哪邊出了問題??

    • 請確認一下您的藍牙模組的指示燈是否有閃爍,如果是常亮的話那代表已經是連接狀態,建議可以先拔掉給藍牙模組的供電再重試一次看看,要在提示燈飾閃爍(代表尚未連結)的情況下才能從手機端中清單選取並連線喔!

      • 目前問題是,需要手機藍牙與模組先進行連線(模組指示燈常亮),APP清單中才會出現藍芽位置,才能進行連線,但會出現error 507 情況 。反之,沒有連線(指示燈off),app清單則沒有選項進行連線。
        我用的是Microchip RN4020的模組,因此我在想會不會是AI2的藍芽模組版本太舊所以無法與我使用的模組進行通訊,或者是模組設定slave錯誤等等,是否可以給些建議 謝謝。

  31. Arduino:1.6.5 (Windows 8.1), 板子:”Arduino/Genuino Uno”

    建置選項已變更,重建所有

    led_switch:1: error: stray ‘#’ in program
    led_switch:2: error: #include expects “FILENAME” or
    led_switch:1: error: expected unqualified-id before ‘ 偏好設定裡啟用。

    新手問問題,我已經全部複製了,但為甚麼有這一大列的錯誤訊息出現,懇求解釋 ,
    感恩~~~

  32. 您好~
    我的是Arduino UNO R3 SMD 開發板,Pin13不是PWM訊號,我連接完藍芽手機APP按turnon只有板子的RX會亮,LED燈不會亮,會不會是板子不一樣所以腳位也不一樣的關係?

  33. 你好~
    我的是arduino uno 開發板,13腳位不是pwm,手機app按下turnon時只有板子的RX會亮,LED不會亮,請問是不是板子不同的關係?

    • 您好,與上一個問題的狀況是一樣的喔。因為本篇使用的是 Arduino MEGA2560,他的D13腳位有支援PWM。您如果使用 Uno 的話,請把 arduino 程式碼中關於 13號腳位改為 3 5 6 9 10 11 其中之一腳位即可

  34. 我是依照上面完全複製
    可是傳程式卻顯示以下,想問怎麼樣情況會發生這樣??
    Arduino: 1.6.9 Hourly Build 2016/04/20 08:33 (Windows 10), Board: “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    __:29: error: stray ‘\343’ in program

    ??

    ^

    __:29: error: stray ‘\200’ in program

    __:29: error: stray ‘\200’ in program

    exit status 1
    stray ‘\343’ in program

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

  35. 我想請問為何程式碼裡面要用 while(1)
    跟拿掉 while,把 loop 裡面宣告的兩個變數拿到外面不是也一樣嗎?

  36. 你好 我的控制板是raspberry pi3,我想用python語言將GPS模組讀到的經緯度顯示在APP Inventor上,請問有辦法直接顯示嗎?還是要透過一個雲端儲存資料,APP Inventor在去抓取雲端的資料?這部分有什麼的文章可以參考嗎? 感謝