const int trig = 8; // 触发信号
const int echo = 9; // 反馈信号
int LED = 10;//定义数字接口10,对应
int buzzer=12;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
pinMode(echo, INPUT);
pinMode(trig, OUTPUT);
//触发端口设置为输出,反馈端口设置为输入
pinMode(LED,OUTPUT);//设置数字10 口为输出接口
Serial.begin(9600);
pinMode(buzzer,OUTPUT);
lcd.init();
lcd.backlight();
}
//主循环
void loop() {
long IntervalTime=0; //定义一个时间变量
unsigned char i,j;
while(1){
digitalWrite(trig, 1);//置高电平
delayMicroseconds(15);//延时15us
digitalWrite(trig, 0);//设为低电平
IntervalTime=pulseIn(echo, HIGH);//用自带的函数采样反馈的高电平的宽度,单位us
float S=IntervalTime/58.00; //使用浮点计算出距离,单位cm
Serial.println(S);//通过串口输出距离数值
lcd.setCursor(10,0);
lcd.print(S);
if(S<50){
lcd.setCursor(0,0);
lcd.print("too low");
digitalWrite(LED,HIGH);//IO 口10 设置为高电平,点亮数字10 口LED
delay(500);
digitalWrite(LED,LOW);//IO 口10 设置为低电平,熄灭数字10 口LED
delay(500);
if(S<10){
lcd.setCursor(14,0);
lcd.print(" ");
}
for(i=0;i<80;i++)//输出一个频率的声音
{
digitalWrite(buzzer,HIGH);//发声音
delay(1);//延时1ms
digitalWrite(buzzer,LOW);//不发声音
delay(1);//延时1ms
}
}
if(50<S){
if(S<100){
lcd.setCursor(0,0);
lcd.print("normal ");
digitalWrite(LED,HIGH);//IO 口10 设置为高电平,点亮数字10 口LED
delay(100);
digitalWrite(LED,LOW);//IO 口10 设置为低电平,熄灭数字10 口LED
delay(100);
lcd.setCursor(15,0);
lcd.print(" ");
for(i=0;i<100;i++)//输出一个频率的声音
{
digitalWrite(buzzer,HIGH);//发声音
delay(1);//延时1ms
digitalWrite(buzzer,LOW);//不发声音
delay(1);//延时1ms
}
}
if(S>100){
lcd.setCursor(0,0);
lcd.print("too far");
digitalWrite(LED,HIGH);//IO 口10 设置为高电平,点亮数字10 口LED
for(i=0;i<200;i++)//输出一个频率的声音
{
digitalWrite(buzzer,HIGH);//发声音
delay(1);//延时1ms
digitalWrite(buzzer,LOW);//不发声音
delay(1);//延时1ms
}
}
}
S=0;IntervalTime=0;//对应的数值清零。
//延时间隔决定采样的频率,根据实际需要变换参数
delay(500);
}
}