1. 程式人生 > >arduino mega2560與HC-06藍芽模組使用

arduino mega2560與HC-06藍芽模組使用

因為專案需求:

選擇了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”,並返回兩次訊號之間的時間間隔。

因為安卓手機端還沒有弄好,後面完成了會繼續更新。