arduino mega2560與HC-06藍芽模組使用
阿新 • • 發佈:2019-02-02
因為專案需求:
選擇了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”,並返回兩次訊號之間的時間間隔。
因為安卓手機端還沒有弄好,後面完成了會繼續更新。