本篇將簡單介紹如何用手機的 Slider 滑桿元件來控制Arduino上的LED燈漸明漸暗,當然就是用到 analogWrite的 PWM效果囉。
範例程式請點我下載(App Inventor中文學習網檔案庫) App Inventor 2檔名:SlideControlLED.aia
準備以下材料:
1 Android系統智慧型手機
2.Arduino相容開發板 (本文使用 Arduino MEGA2560)
3.藍牙收發接收器(本系列使用JY-MCU04 或 JY-MCU05)
4.麵包板
5.1個220歐姆色碼電阻
6.1顆LED
先由下圖將藍牙發射器及LED接上Arduino
App Inventor 編寫簡易的藍牙訊息發送程式
畫面元件很簡單,點選 BT List 之後,會顯示藍牙配對裝置清單,點選您已經配對好的藍牙裝置之後,就可藉由畫面中間的滑桿元件(自定義數值範圍為0~80,您也可以偷懶直接就定義為0~255)。App Inventor 會每隔按鈕就可點選。反覆點選就會送出不同的字元給Arduino 來控制LED亮滅。
程式說明:
STEP3:
本程式重點在於使用 CLock.Timer事件每 0.01 秒將 Slider 的當下數值透過 BluetoothClient元件的 SendText 指令送出。最後按下 Disconnect 斷線按鈕則中止藍牙連線,並將個畫面元件回復到初始狀態等候下一次連線。
STEP2:Arduino的CODE
#include <SoftwareSerial.h>
#include <Wire.h>//引用二個函式庫SoftwareSerial及Wire
SoftwareSerial I2CBT(10,11);//定義PIN10及PIN11分別為RX及TX腳位
void setup() {
Serial.begin(9600); //Arduino起始鮑率:9600
I2CBT.begin(57600); //藍牙鮑率:57600(注意!鮑率每個藍牙晶片不一定相同,請務必確認
pinMode(9, OUTPUT); //請注意您使用的Arduino 該腳位是否支援 PWM (會有~符號),否則會看不到效果
}
void loop() {
byte cmmd[20];
int insize;
while(1){
//讀取藍牙訊息
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(" “);
}//此段請參考上一篇解釋
}
if(insize==4){
a = (cmmd[0]-48)*10;
a=a+(cmmd[1]-48);
}
if(insize==3){
a=(cmmd[0]-48);
}
Serial.println(a);
analogWrite(9,map(a,0,80,0,255)); //使用 a 變數控制 LED 亮度
} //while
}