/*--------------------------------------------------------------------------1--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------本程序所引用库--------------------------------------------------------------------*/
/*
本程序需要搜索安装如下库(括号里是库的作者):
- LiquidCrystal I2C ( by Frank de Brabander )
*/
#include <Wire.h> // 用于控制I2C通信协议,允许控制其他I2C协议的设备
#include <LiquidCrystal_I2C.h> // 允许通过I2C总线与LCD显示屏进行通信和控制
/*--------------------------------------------------------------------------2--------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------变量声明-----------------------------------------------------------------------*/
/******************************常量声明******************************/
/*****************************< 引脚定义 >*****************************/
const int Trig_Pin = 3; // 超声波的引脚Trig
const int Echo_Pin = 4; // 超声波的引脚Echo
/******************************变量声明******************************/
/******************************对象声明******************************/
LiquidCrystal_I2C lcd(0x27, 16, 2); // IIC地址,每行几个,共几行
/*--------------------------------------------------------------------------3--------------------------------------------------------------------------*/
/*-------------------------------------------------------------------setup()程序初始化------------------------------------------------------------------*/
void setup() {
/******************************启动串口通讯******************************/
Serial.begin(9600); // 初始化串口通信,并设置波特率为9600
/******************************< 设置引脚模式 >******************************/
pinMode(Trig_Pin, OUTPUT); // Trig引脚为输出模式,发射超声波
pinMode(Echo_Pin, INPUT); // Echo引脚为输入模式,接收超声波
/*******************************初始化CLD********************************/
lcd.init(); // 初始化LCD
lcd.backlight(); // 开启背光
lcd.setCursor(0, 0);
lcd.print("Dist: ");
}
/*--------------------------------------------------------------------------4--------------------------------------------------------------------------*/
/*-------------------------------------------------------------------loop()基础循环体-------------------------------------------------------------------*/
void loop() {
float Distance = get_Distance_CM(Trig_Pin, Echo_Pin); // 得到超声波测得的距离,并赋值给Distance
lcd.setCursor(6, 0);
lcd.print(Distance);
lcd.print("cm");
}
/*--------------------------------------------------------------------------5--------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------函数定义-----------------------------------------------------------------------*/
/****************************************************************************************************
函数:get_Distance_CM()
作用:通过超声波传感器测量距离并返回距离值(单位:厘米)
参数:
- Trig: 触发引脚
- Echo: 回波引脚
返回值:距离值(单位:厘米)
****************************************************************************************************/
float get_Distance_CM(int Trig, int Echo) {
// 给Trig发送一个10微妙的高电平信号,让传感器发出超声波脉冲
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
// 同时Echo会变高,只需要测量Echo变高的时间
float Temp = float(pulseIn(Echo, HIGH, 30000)); // 测量Echo引脚上的高电平脉冲的持续时间,超过30ms则返回0。
float cm = (Temp * 17) / 1000; // 把回波时间换算成cm
return cm;
}