操作思路:
初始化时将trig和echo端口都置低,首先向给trig 发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照 测试距离=(高电平时间*声速(340M/S))/2 就可以算出超声波到障碍物的距离。
编程步骤
1.配置好相应GPIO,Trig和Echo引脚
2.配置定时器,开启中断,并记录中断产生次数
3.给模块TRIG端口发送大于10us的高电平信号,发出回响信号时,Echo端呈现高电平,此时打开定时器计时;当收到回响信号时,Echo端呈现低电平,此时关闭定时器。
4.获取Echo高电平时间,利用相关公式计算出距离 dis = (高电平时间*声速(340M/S))/2(取平均值获取更精准数据)
正常距离 亮绿灯
有障碍 亮红灯 蜂鸣器报警
串口显示距离
#include "led.h"
#include "delay.h"
#include "ultrasonsic.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "beep.h"
int main(void)
{
float length;
delay_init();
uart_init(115200); //初始化串口,波特率115200
LED_Init(); //初始化LED
BEEP_Init();//初始化蜂鸣器
initHcsr04();
LED0 = 1;//上电默认绿灯亮
while(1){
length=Hcsr04GetLength(); //获取距离
printf("dis = %fcm\r\n",length);//串口打印距离
delay_ms(50);
if(length < 10){//小于10cm亮红灯绿灯灭
LED0 = 0;
LED1 = 1;
BEEP = 1;
delay_ms(300);
}else{
LED0 = 1;
LED1 = 0;
BEEP = 0;
}
}
}