2018年2月17日 星期六

Arduino (20) 主、從端HC-05藍芽互相連通+序列阜輸入。


這東西是藍芽模組HC-05,而市面上有另一種叫HC-06的藍芽模組。

HC-05和HC-06不一樣的地方是HC-05多一個Enable-PIN,

可以進入AT模式設定Master或Slave,HC-06只能是Slave。

所以我直接用兩個HC-05比較方便。




首先先來進入AT模式,RX、TX、GND接好,Enable接3.3V,重要的是5VDC供電先不接,

還有要先灌"設定AT"的Code(如下)。

#include <SoftwareSerial.h> 

SoftwareSerial BT(8, 9);
// TX, RX (軟體RX要接硬體TX、硬體TX要接軟體RX)。

char val;

void setup() {
  Serial.begin(9600); 
  Serial.println("BT is ready!");
  BT.begin(38400);
}

void loop() {

  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
//程式LOOP主要功能就是收到什麼""指令""做什麼事。

}

按住板子上唯一的按鈕,然後插入DC5V供電,放掉按鈕,板子上的燈會呈現慢速閃動,

這樣就表示已進入AT,這時開啟序列阜就OK了。

後來有幾個程序要做,

1、輸入指令AT--確認AT連線。

2、輸入指令AT+ADDR?--回傳位置(Slave就好)。


3、輸入指令AT+ROLE=1 (Master)、輸入指令AT+ROLE=0 (Slave)。

4、輸入指令AT+BIND=儲存連線Slave藍芽位置。





Master端的Code如下:

#include <SoftwareSerial.h> 


SoftwareSerial BT(8, 9);

char val;

void setup() {
  Serial.begin(9600); 
  Serial.println("BT is ready!");

  BT.begin(38400);
//Baud Rate記得都要設38400。

}

void loop() {

  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
//這一樣是使用序列阜輸入訊息給Slave端。

}



接下來Slave端的Code如下:。

#include <SoftwareSerial.h>

SoftwareSerial BT(8, 9);

char val;

void setup() {
  BT.begin(38400);
  pinMode(10, OUTPUT);
//輸出定義在I/O 第10PIN。
}

void loop() {
  if (BT.available()) {
    val = BT.read();
    if (val == '1') {
      digitalWrite(10, 1);
      BT.println("ON");
       // Master端輸入字元"1",10PIN輸出HIGH。

    } else if (val == '0') {
      digitalWrite(10, 0);
      BT.println("OFF");
      // Master端輸入字元"0",10PIN輸出LOW。

    }
  }
}




成果像影片這樣,序列阜也會顯示開關。

這東西比較複雜點,細心點弄還是弄得出來的。


沒有留言:

張貼留言

8051 (6) 紅外線避障模組控制LED七段顯示器。

這篇要做的Project就是感測器測到訊號時,LED七段顯示器會開始計算偵測次數, 到第5次時會讓紅色LED燈發光。 程式如下: #include <reg52.h> unsigned char seg[5]={0xf9,...