#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
// lcd的I2C地址
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int trigPin = 9;
const int echoPin = 10;
double duration;
double distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
// 初始化LCD
lcd.begin(16, 2); //设置lcd
lcd.backlight();
// 显示初始内容
lcd.setCursor(0, 0); // 第一行,第一列
lcd.print("Distance: ");
lcd.setCursor(0, 1); // 第二行,第一列
lcd.print(" cm");
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// 发送10微秒的高电平脉冲HC-SR04传感器需要一个10微秒的高电平脉冲来触发测距。
// 当trigPin接收到这个脉冲时,传感器会发出8个40kHz的超声波脉冲
// 然后等待接收反射回来的超声波信号
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 等待Echo变高
while (digitalRead(echoPin) == LOW);
// 开始计时
unsigned long startTime = micros();
// 等待Echo变低
while (digitalRead(echoPin) == HIGH);
// 停止计时
unsigned long endTime = micros();
// 计算脉冲持续时间
duration = endTime - startTime;
// 计算距离(厘米)
distance = duration * 0.034 / 2;
// 输出到串口
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 清除显示内容
lcd.clear();
// 输出距离数据
lcd.setCursor(0, 0); // 设置光标第一行
lcd.print("Distance: ");
lcd.print(distance);
lcd.setCursor(0, 1);
lcd.print("cm");
// 延时500毫秒
delay(500);
}