实验器材:
超声波模块,两个HC05蓝牙模块(注意不要买到盗版的了),小灯,液晶显示屏LCD,蜂鸣器
实现功能:
从机读取超声波距离,在液晶屏上面显示,并通过蓝牙协议传入到从机,主机通过串口可显示出来,如果距离大于20cm,小灯亮,且蜂鸣器叫。
实验步骤:
1,用AT指令先进行两个蓝牙模块之间的配对,两个灯两闪一灭就成功配对了
2,连线,注意蓝牙的RX和TX与板子是反起接的
3,烧入下列代码(代码有些累赘,使用可自己修改)
主机代码
#include <SoftwareSerial.h> #include "dht11.h" #include <Wire.h> #define Software_TX 2 #define Software_RX 3 int led= 8; int buzzer=7; String A,C; byte read_dat, jdy_dat,q; SoftwareSerial BLE_JDY_16(Software_RX, Software_TX); dht11 DHT11; int a,b,f; char x,m,v; void setup() { pinMode(8,INPUT); pinMode(buzzer,OUTPUT); Serial.begin(9600); BLE_JDY_16.begin(9600); pinMode(motor,OUTPUT); } int i=0; void loop() { if (BLE_JDY_16.available()) { x=BLE_JDY_16.read(); int a=x-'0'; Serial.println("超声波距离:"); Serial.println(a); delay(300); if(a>20){ digitalWrite(buzzer, HIGH); } else {digitalWrite(buzzer, LOW);} // turn the LED off by making the voltage LOW } }
从机代码
#include <SoftwareSerial.h> #include "dht11.h" #include <Wire.h> #define Software_TX 2 #define Software_RX 3 #define DHT11PIN 8 #include "LiquidCrystal_I2C.h" byte read_dat, jdy_dat; SoftwareSerial BLE_JDY_16(Software_RX, Software_TX); dht11 DHT11; int a,b,d; int led=7; char x,r; int buzzer=8; int distance; const int TrigPin=10; const int EchoPin=9; LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { pinMode(led,INPUT); pinMode(buzzer,OUTPUT); pinMode(DHT11PIN,INPUT); Serial.begin(9600); BLE_JDY_16.begin(9600); lcd.init(); //初始化lcd lcd.backlight();//点亮lcd pinMode(TrigPin,OUTPUT); pinMode(EchoPin,INPUT); } void loop() { digitalWrite(TrigPin,LOW); delayMicroseconds(2); digitalWrite(TrigPin,HIGH); delayMicroseconds(10); digitalWrite(TrigPin,LOW); distance=pulseIn(EchoPin,HIGH)/58.00; if(distance>50){ digitalWrite(led,HIGH); } else{ digitalWrite(led,LOW); } Serial.print("diatance is :"); Serial.print(distance); Serial.print("cm"); Serial.println(""); a =distance; x=a+'0'; delay(1000); // A += (char)chk; // a=A.toInt(); BLE_JDY_16.write(x); lcd.setCursor(0, 0); lcd.print("T: "); lcd.print(a); lcd.print(" %"); if (BLE_JDY_16.available()) { r = BLE_JDY_16.read(); d=r-'0'; lcd.setCursor(0, 1); lcd.print("s: "); lcd.print(d); lcd.print(" %"); } }