实验器材:超声波模块,两个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(" %");
}
}