const int trigPin = 2; // 超声波传感器的Trig引脚连接到数字IO口2
const int echoPin = 3; // 超声波传感器的Echo引脚连接到数字IO口3
const int buzzerPin = 4; // 蜂鸣器引脚连接到数字IO口4
long duration; // 定义变量保存声波从发射到回收的时间
int distance; // 定义变量保存计算出的距离
void setup() {
pinMode(trigPin, OUTPUT); // Trig引脚设置为输出模式
pinMode(echoPin, INPUT); // Echo引脚设置为输入模式
pinMode(buzzerPin, OUTPUT); // 蜂鸣器引脚设置为输出模式
Serial.begin(9600); // 串口通信,可用于调试
}
void loop() {
digitalWrite(trigPin, LOW); // 每次读取距离前,先将Trig引脚置低电平2us
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // 将Trig引脚置高电平10us
delayMicroseconds(10);
digitalWrite(trigPin, LOW); // 将Trig引脚置低电平,启动声波发射
duration = pulseIn(echoPin, HIGH); // 使用pulseIn()函数获取Echo引脚返回的高电平时间,单位为微秒
distance = duration * 0.034 / 2; // 计算出距离,单位为厘米(速度为340m/s,除以2为往返时间)
if(distance >= 100){ // 大于等于10m时蜂鸣器间隔大
tone(buzzerPin, 1000, 500);
delay(500);
}
else if(distance >= 50){ // 大于等于5m时蜂鸣器间隔较小
tone(buzzerPin, 1000, 200);
delay(200);
}
else if(distance >= 10){ // 大于等于1m时蜂鸣器间隔更小
tone(buzzerPin, 1000, 100);
delay(100);
}
else{ // 小于1m时蜂鸣器连续发声
tone(buzzerPin, 1000);
}
Serial.print(distance); // 打印距离信息到串口,可用于调试
Serial.println(" cm");
delay(500); // 延迟一段时间后再读取
}