串口加屏幕顯示超聲測距數據,使用HC-HR04,超聲波測距是超聲波發射器向某一方向發射超聲波,在發射時刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。超聲波在空氣中的傳播速度為340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物的距離(s),即:s=340t/2 。超聲波測距的原理是利用超聲波在空氣中的傳播速度為已知,測量聲波在發射后遇到障礙物反射回來的時間,根據發射和接收的時間差計算出發射點到障礙物的實際距離。代碼中已經計算,探測距離3mm到2m,代碼如下:
stm32單片機源程序如下:
- /*連接方式
- Trig ---- GPIO_Pin_1
- Echo ---- GPIO_Pin_0
- VCC ---- 5.0V
- GND ---- GND
- */
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "timer.h"
- #include "usart.h"
- extern u8 TIM2CH1_CAPTURE_STA; //輸入捕獲狀態
- extern u16 TIM2CH1_CAPTURE_VAL; //輸入捕獲值
- float distance;
- int main(void)
- {
-
- u32 temp=0;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設置中斷優先級分組2
- delay_init(); //延時函數初始化
- uart_init(9600); //9600
- LED_Init(); //初始化與LED連接的硬件接口
- TIM1_PWM_Init(899,0); //不分頻。PWM頻率=72000/(899+1)=80Khz
- TIM2_Cap_Init(0XFFFF,72-1); //以1Mhz的頻率計數
- while(1)
- {
- delay_ms(10);
- Wave_SRD_Strat();
- // TIM_SetCompare1(TIM1,TIM_GetCapture1(TIM1)+1);
- // if(TIM_GetCapture1(TIM1)==300)TIM_SetCompare1(TIM1,0);
- if(TIM2CH1_CAPTURE_STA&0X80)//成功捕獲到了一次高電平
- {
- temp=TIM2CH1_CAPTURE_STA&0X3F;
- temp*=65536; //溢出時間總和
- temp+=TIM2CH1_CAPTURE_VAL; //得到總的高電平時間
- distance = temp/59.0;
- printf("HIGH:%.2f cm\r\n",distance); //打印總的高點平時間
- LED1=!LED1;
- TIM2CH1_CAPTURE_STA=0; //開啟下一次捕獲
- }
- }
- }
復制代碼
所有資料51hei提供下載:
超聲波5.0.rar
(299.59 KB, 下載次數: 104)
2018-9-13 18:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|