Arduino 之 声波测距蜂鸣器

时间:2024-03-11 22:08:18
 1 #define Buzzer 2    // 蜂鸣器引脚
 2 #define TrigPin 3
 3 #define EchoPin 4
 4 float Value_cm;   //  存储距离数据
 5 
 6 void setup()
 7 {
 8   Serial.begin(115200);
 9   pinMode(TrigPin, OUTPUT); //超声波发射
10   pinMode(EchoPin, INPUT);  //超声波接收
11   pinMode(Buzzer,OUTPUT);  //蜂鸣器引脚设定为输出
12 }
13 
14 void loop()
15 {
16   digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
17   delayMicroseconds(2);
18   digitalWrite(TrigPin, HIGH);
19   delayMicroseconds(10);
20   digitalWrite(TrigPin, LOW);
21   Value_cm = float( pulseIn(EchoPin, HIGH) * 17 )/1000; //将回波时间换算成cm
22   //读取一个引脚的脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。
23   //返回脉冲的长度,单位微秒。如果在指定的时间内无脉冲函数返回。
24   //此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。计时范围从10微秒至3分钟。(1秒=1000毫秒=1000000微秒)
25   //接收到的高电平的时间(us)* 340m/s / 2 = 接收到高电平的时间(us) * 17000 cm / 1000000 us = 接收到高电平的时间 * 17 / 1000  (cm)
26 
27   Serial.println(Value_cm);
28   for(int i = 0 ; i < 100 ; i++)    //循环100次
29   {
30     digitalWrite(Buzzer,HIGH);    //设置输出高电平
31     delayMicroseconds(220); //延时PotBuffer值 us
32     digitalWrite(Buzzer,LOW);     //设置输出低电平
33     delayMicroseconds(220);       //延时100us
34   }
35   if (Value_cm >=2000){
36   Value_cm = 0; 
37   Serial.println("距离超限!");}
38   else if (Value_cm <= 500){
39   delay(Value_cm);}
40 }