有一段時間想要做幾個跟藍芽有關的實作,每遇到一些小問題都是因為要用Android手機才有支援的APP,iphone手機則因為通訊的問題,常常無法順利成功。這週上自動控制課程時,課程的主題是藍芽,配合老師上課的進度,試著用 iPhone 的 Bluetooth Terminal APP 當作串列通訊讓Arduino 控制 LED點亮或熄滅。沒想到,很順利就完成實作,以下就紀錄一下整個過程。
將上面的程式上傳Arduino完成後,接下來就是要到iPhone的App Store或Android的Google Play商店,找到 Bluetooth Terminal後下載安裝。以我的手機iPhone為例:找到下圖(左)的APP,安裝成功後,執行程式會看到下圖(右)的畫面,找到手機可以接收到的藍芽的名稱(我的藍芽預設名稱是MLT-BT05),按下 Connect ,跳到下一個畫面。
看到畫面中央有個 ASCII ,上方有個選項是 Select Characteristic ,找到符合藍芽特性的選性,以我這款MLT-BT05為例,有支援FFE1,就選擇這個當作通訊通道。接下來就可以對藍芽進行終端機通訊,在ASCII Symbol處輸入字元「c」,按下 Send ,送出指令給藍芽,就可以看到三個顏色的LED燈開始輪流亮起與熄滅。
[安裝Library]
執行程式前,需要用到定時執行某函數的程式庫Timer:- JChristensen /Timer
程式庫(Library)安裝方法請參考另一篇文章: Arduino筆記:安裝 Arduino IDE 程式庫(Library)。
[材料]
- Arduino Uno x 1
- HC-05 Bluetooth x 1
- 220歐姆電阻 x 3
- LED 紅, 黃, 綠 各 1
- 連接線 x n條
[接線圖]
Arduino接腳 | HC-05 藍芽 | 其他 |
---|---|---|
+5V | VCC | - |
GND | GND | - |
D3 | TX | - |
D2 | RX | |
D10 | - | 綠色LED正極,負接220歐姆電阻,電阻另一端接地。 |
D9 | - | 黃色LED正極,負接220歐姆電阻,電阻另一端接地。 |
D8 | - | 紅色LED正極,負接220歐姆電阻,電阻另一端接地。 |
[程式]
#include <Timer.h> //引用Timer定時執行程式庫 #include <SoftwareSerial.h> SoftwareSerial BT(3,2); //設定藍芽的軟體序列埠(RX, TX) #define pinRed 8 //紅色 LED 燈角位 #define pinYellow 9 //黃色 LED 燈角位 #define pinGreen 10 //綠色 LED 燈角位 char ch; //藍芽傳送過來的字 boolean flagCycle=false; //LED 燈是否閃爍 int interval=500; //LED 燈閃爍的時間間隔 int blink=3; //1 為紅燈閃爍,2 為黃燈閃爍,3 為綠燈閃爍 void ledCycle(); Timer t; //建立定時執行物件 void setup() { Serial.begin(9600); BT.begin(9600); //啟動軟體序列埠 t.every(1000,ledCycle); //每秒執行一次 Serial.println("Bluetooth is Ready ! "); pinMode(pinRed, OUTPUT); pinMode(pinYellow, OUTPUT); pinMode(pinGreen, OUTPUT); } void loop() { while(BT.available()) { //若有資料傳送過來就接收 delay(3); ch = BT.read(); if( (ch != 'r') && (ch != 's') && (ch != 'g') && (ch != 'h') && (ch != 'y') && (ch != 'z') && (ch != 'c') && (ch != 'w')) { Serial.println("Please input r, s, g, h, y, z, c, w ??"); continue; } else break; } t.update(); //更新閃爍狀態 if (ch=='r' && flagCycle==false) { //紅燈亮 digitalWrite(pinRed, HIGH); } else if (ch=='s' && flagCycle==false) { //紅燈滅 digitalWrite(pinRed, LOW); } else if (ch=='g' && flagCycle==false) { //綠燈亮 digitalWrite(pinGreen, HIGH); } else if (ch=='h' && flagCycle==false) { //綠燈滅 digitalWrite(pinGreen, LOW); } else if (ch=='y' && flagCycle==false) { //黃燈亮 digitalWrite(pinYellow, HIGH); } else if (ch=='z' && flagCycle==false) { //黃燈滅 digitalWrite(pinYellow, LOW); } else if (ch=='c') { //開始閃爍 digitalWrite(pinRed, LOW); digitalWrite(pinYellow, LOW); digitalWrite(pinGreen, LOW); blink=1; flagCycle=true; } else if (ch=='w') { //結束閃爍 flagCycle=false; } } void ledCycle() { //LED 燈閃爍 if(flagCycle) { //目前 LED 燈正在閃爍 if(blink==1) { //紅燈閃爍 digitalWrite(pinRed, HIGH); digitalWrite(pinYellow, LOW); digitalWrite(pinGreen, LOW); } else if(blink==2) { //黃燈閃爍 digitalWrite(pinRed, LOW); digitalWrite(pinYellow, HIGH); digitalWrite(pinGreen, LOW); } else if(blink==3) { //綠燈閃爍 digitalWrite(pinRed, LOW); digitalWrite(pinYellow, LOW); digitalWrite(pinGreen, HIGH); } blink++; if(blink>3) blink=1; //循環 } }
將上面的程式上傳Arduino完成後,接下來就是要到iPhone的App Store或Android的Google Play商店,找到 Bluetooth Terminal後下載安裝。以我的手機iPhone為例:找到下圖(左)的APP,安裝成功後,執行程式會看到下圖(右)的畫面,找到手機可以接收到的藍芽的名稱(我的藍芽預設名稱是MLT-BT05),按下 Connect ,跳到下一個畫面。
看到畫面中央有個 ASCII ,上方有個選項是 Select Characteristic ,找到符合藍芽特性的選性,以我這款MLT-BT05為例,有支援FFE1,就選擇這個當作通訊通道。接下來就可以對藍芽進行終端機通訊,在ASCII Symbol處輸入字元「c」,按下 Send ,送出指令給藍芽,就可以看到三個顏色的LED燈開始輪流亮起與熄滅。
[結果]
將執行結果拍成影片,先按下紅色控制鍵 r,依序按黃色控制鍵 y, 其次 g讓三個燈都亮起,接著按下三個代表色的下一個字元,s表示紅色燈熄滅,z代表黃燈熄滅,h代表綠燈熄滅,再按下c讓三個燈輪流亮起/熄滅,最後按下w停止輪流亮/滅。[參考資料]
- 老師上課提供範例
張貼留言