因爲項目需求:
選擇了Arduino Mega2560作爲控制器;
HC06藍牙模塊作爲無線通訊模塊,用來和Android藍牙模塊通訊(該模塊不支持藍牙4.0);
該文主要完成了Arduino對藍牙模塊的設置,通過Arduino對信號進行捕捉,並通過藍牙模塊發送出去。
話不多說,上連接圖:
HC06TX接ArduinoRX,HC06RX接TX,VCC接3.3V,GND接地,這些藍牙模塊的手冊中都有。要注意的是,Arduino Mega有四個串口,其中串口0是與PC傳輸時會佔用的串口,所以進行代碼同步的時候要斷開該串口;我在實驗中選擇了串口1(14,15引腳)。
對藍牙進行設置:名字、密碼、波特率等;
HC06支持AT指令對其參數進行設置:
AT,AT+NAME****,AT+PIN****;
具體代碼如下:
char val,val1,val2;
String comdata = "";
int mark = 0;
int InPin = 22;
unsigned long time = 0;
unsigned long time1 = 0;
unsigned long time2 = 0;
volatile int state = LOW;
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
pinMode(InPin,INPUT);
//attachInterrupt(0, Volchange, RISING);
}
void loop() {
//AT Set
if (Serial.available())
{
val = Serial.read();
if(val =='a')
{
Serial1.print("AT+NAMEEMYWONG");//Set BT name
}
else if(val =='b')
{
//Serial.println("CYCLYNOW");
Serial1.print("AT+PIN0000");// Set Pin
}
else if(val == 'c')
{
Serial1.write("AT");// Set Pin
}
}
// read pulse from digital
val2 = digitalRead(InPin);
if( (val1 != val2) && (val2 ==HIGH) )
{
Serial1.print("AT");
//Serial1.print("$");
//Serial1.print("1");
//Serial1.print("#");
}
val1 = val2;
//bluetooth receive
while(Serial1.available()>0)
{
comdata += char(Serial1.read());
delay(2);
mark = 1;
}
if(1 ==mark)
{
time2 = millis();
time = time2 - time1;
time1 = time2;
Serial.print(comdata);
Serial.print(" Pulse interval is:");
Serial.print(time);
Serial.println("ms");
comdata = "";
mark = 0;
}
}
裏面有些冗餘代碼沒有刪掉,完成的功能主要是:當22引腳信號發生變化,則對串口1發送“AT”指令,藍牙模塊會對該指令迴應“OK”,並返回兩次信號之間的時間間隔。
因爲安卓手機端還沒有弄好,後面完成了會繼續更新。