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 }