嘛,过来同样是地研所的子板块逛一下~ 顺便发出最近的拙作 单片机还是从arduino上手,虽然微机原理课玩过stm32,但终究不是很喜欢。 首先是我们的声波检测模块hc-sr04 详细参数如下: 通过发射声波接受返回的方式来检测有无物体 需要在trin引脚用一个10ms的脉冲去激发 然后接受echopin的高电位时间,使用pluseIn() 根据公式除以58就是距离的厘米数了。 同时我们用led red来进行报警 并buzzer在200HZ~800HZ间蜂鸣 代码如下: [mw_shl_code=c,true]const int echopin=3; const int trigpin=2; int buzzer=6; int led = 5; void setup() { Serial.begin(9600); pinMode(buzzer,OUTPUT); pinMode(echopin,INPUT); //设定echo为输入模式 pinMode(trigpin,OUTPUT);//设定trig为输出模式 pinMode(led, OUTPUT); } void notice() { int i,j; for(i=0;i<40;i++)//输出一个频率的声音 { digitalWrite(buzzer,HIGH);//发声音 delay(1);//延时1ms digitalWrite(buzzer,LOW);//不发声音 delay(1);//延时ms } for(i=0;i<50;i++)//输出另一个频率的声音 { digitalWrite(buzzer,HIGH);//发声音 delay(2);//延时2ms digitalWrite(buzzer,LOW);//不发声音 delay(2);//延时2ms } } void warn() { for(int i=200;i<=800;i++) { pinMode(buzzer,OUTPUT); tone(buzzer,i); delay(5); } delay(4000); for(int i=800;i>=200;i--) { pinMode(buzzer,OUTPUT); tone(buzzer,i); delay(10); } } void loop() { digitalWrite(trigpin,LOW); delayMicroseconds(2); digitalWrite(trigpin,HIGH); delayMicroseconds(10); digitalWrite(trigpin,LOW); //发一个10ms的高脉冲去触发TrigPin float distance = pulseIn(echopin,HIGH);//接收高电平时间 distance = distance/58.0;//计算距离 Serial.print(distance); //输出距离 Serial.println("cm"); //输出单位 if(distance<60) { digitalWrite(led,HIGH); warn(); } else { digitalWrite(led,LOW); }//距离小于100cm时,led写入高电平 delay(100); }[/mw_shl_code] 结果如下