有一段時間想要做幾個跟藍芽有關的實作,每遇到一些小問題都是因為要用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停止輪流亮/滅。[參考資料]
- 老師上課提供範例



張貼留言