// LCD Keypad Shield 1602 接线定义
// RS=8, EN=9, D4=4,D5=5,D6=6,D7=7, R/W接GND
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// HC-SR04超声波引脚
#define TRIG_PIN 2
#define ECHO_PIN 3
#define LED_PIN 10
// 蜂鸣器引脚
#define BZ_PIN 11
char str1[10] = "dis:";
long distanceVal; // 存储测量距离
// HC-SR04 测距函数(原生驱动,无需第三方库)
long getDistanceCM()
{
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// 读取高电平时间
long time = pulseIn(ECHO_PIN, HIGH);
// 声速换算距离 cm
long dist = time * 0.034 / 2;
return dist;
}
void setup()
{
// LCD初始化 16列2行
lcd.begin(16, 2);
// 串口波特率115200
Serial.begin(115200);
// 引脚模式配置
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BZ_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
// 开机清屏提示
lcd.clear();
lcd.print("HC-SR04 Detect");
delay(1000);
lcd.clear();
}
void loop()
{
// 获取距离
distanceVal = getDistanceCM();
// LCD第一行显示距离
lcd.setCursor(0, 0);
lcd.print(str1);
lcd.print(distanceVal);
lcd.print("cm "); // 空格覆盖残留数字
// 串口打印
Serial.print("Distance: ");
Serial.print(distanceVal);
Serial.println(" cm");
// 距离小于50cm蜂鸣器报警,距离越近鸣叫越快
if (distanceVal < 50)
{
digitalWrite(BZ_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
// 距离越小延时越短,频率越高
int delayTime = distanceVal * 10;
delay(delayTime);
digitalWrite(BZ_PIN, LOW);
digitalWrite(LED_PIN, LOW);
delay(delayTime);
}
else
{
digitalWrite(BZ_PIN, LOW);
}
delay(50); // 刷新间隔,避免刷屏过快
}
// LCD Keypad Shield 和 arduino UNO 的电路连接
// LCD RS 连接数字引脚 8
// LCD Enable 连接数字引脚 9
// LCD D4 连接数字引脚 4
// LCD D5 连接数字引脚 5
// LCD D6 连接数字引脚 6
// LCD D7 连接数字引脚 7
// LCD R/W 与 GND 连接
// #include <LiquidCrystal.h>
// LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// #include "stdlib.h"
// #define TRIG_PIN 2
// #define ECHO_PIN 3
// char str1[10] = "dis:";
// long a;
// int buzzer = 11;
// Distance(){
// SR04 sr04 = SR04(ECHO_PIN, TRIG_PIN);
// void setup() {
// Serial.begin(9600); // 初始化串口,波特率9600
// }
// void loop() {
// long distance = sr04.Distance(); // 读取距离(单位:厘米)
// Serial.print("当前距离:");
// Serial.print(distance);
// Serial.println(" cm");
// delay(100); // 每100ms刷新一次
// }
// }
// void setup(void)
// {
// lcd.begin(16, 2);
// Serial.begin(115200);
// pinMode(buzzer, OUTPUT);
// delay(1000);
// }
// void loop(void)
// {
// lcd.setCursor(0, 0); //设置光标位置
// lcd.print(str1); //显示 dis:
// a=sr04.Distance(); //显示距离
// Serial.println(a);
// lcd.print(a);
// lcd.print("cm "); //显示单位 cm
// if (a < 50) {
// digitalWrite(buzzer, HIGH);
// delay((a / 10) * 100 + (a % 10) * 5); //距离 a 控制发声频率
// digitalWrite(buzzer, LOW);
// delay((a / 10) * 100 + (a % 10) * 5);
// }
// else{
// digitalWrite(buzzer, LOW);
// }
// }