stm32超声波测距代码

操作思路:

 初始化时将trigecho端口都置低,首先向给trig 发送至少10 us的高电平脉冲(模块自动向外发送840K的方波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照 测试距离=(高电平时间*声速(340M/S))/2 就可以算出超声波到障碍物的距离。

 

编程步骤

1.配置好相应GPIOTrigEcho引脚

2.配置定时器,开启中断,并记录中断产生次数

3.给模块TRIG端口发送大于10us的高电平信号,发出回响信号时,Echo端呈现高电平,此时打开定时器计时;当收到回响信号时,Echo端呈现低电平,此时关闭定时器。

4.获取Echo高电平时间,利用相关公式计算出距离 dis = (高电平时间*声速(340M/S)/2(取平均值获取更精准数据)

正常距离 亮绿灯

stm32超声波测距代码_第1张图片

有障碍 亮红灯 蜂鸣器报警

stm32超声波测距代码_第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;
        }
            
    }

    } 
 

你可能感兴趣的:(单片机,java,单片机,c语言)