#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//初始化液晶屏,声明全局变量dis
LiquidCrystal_I2C mylcd(0x27,16,2);
volatile int dis;
//定义测距函数
float checkdistance_2_3() {
digitalWrite(2, LOW);
delayMicroseconds(2);
digitalWrite(2, HIGH);
delayMicroseconds(10);
digitalWrite(2, LOW);
float distance = pulseIn(3, HIGH) / 58.00;
delay(10);
return distance;
}
void setup(){
mylcd.init();//初始化液晶屏
mylcd.backlight();// 打开背光
dis = 0;// 初始化变量dis为0
pinMode(2, OUTPUT);//引脚2为输出模式
pinMode(3, INPUT);//设置引脚3为输入模式
pinMode(12, OUTPUT); // 设置引脚12为输出模式
pinMode(10, OUTPUT); // 设置引脚10为输出模式
//初始化串口通信
Serial.begin(9600);
}
void loop(){
dis = checkdistance_2_3();// 获取距离值
//dis赋值为超声波测距距离
if (dis <= 20) {
Serial.println(String (dis) + String("cm"));//单位到串口的输出距离
mylcd.setCursor(1-1, 1-1);//1行1列打印
mylcd.print(String(dis) + String("cm"));// 在液晶屏上显示距离值
mylcd.setCursor(1-1, 2-1);//2行1列打印
mylcd.print("STOP!");
digitalWrite(12,HIGH);//数字输出,高
tone(10,988);//播放声音
} else if (dis <= 40) {
Serial.println(String (dis) + String("cm"));
mylcd.clear();//清屏
mylcd.setCursor(1-1, 1-1);
mylcd.print(String(dis) + String("cm"));
mylcd.setCursor(1-1, 2-1);
mylcd.print("ATTENTION!");
digitalWrite(12,HIGH);
tone(10,988);
delay(200);//延时
noTone(10);//结束声音
digitalWrite(12,LOW);
delay(200);
} else if (dis <= 60) {
Serial.println(String (dis) + String("cm"));
mylcd.clear();
mylcd.setCursor(1-1, 1-1);
mylcd.print(String(dis) + String("cm"));
mylcd.setCursor(1-1, 2-1);
mylcd.print("SLOW!");
tone(10,988);
digitalWrite(12,HIGH);
delay(400);
noTone(10);
digitalWrite(12,LOW);//数字输出,低
delay(400);
} else {//距离超过60cm,显示当前距离值
Serial.println(String (dis) + String("cm"));
mylcd.clear();
mylcd.setCursor(1-1, 1-1);
mylcd.print("Distance:");
mylcd.setCursor(1-1, 2-1);
mylcd.print(String(checkdistance_2_3()) + String("cm"));
digitalWrite(12,LOW);
noTone(10);
delay(100);
}
}