STM32F1控制US-100串口超聲波測距
單片機源程序如下:
- #include "usart-ultrasonic.h"
- #include "usart.h"
- #include "SysTick.h"
- //超聲波測距,獲取一次測量值
- u16 Ultrasonic_ranging()
- {
- u16 range=0;
- usart_r=256;
- USART_SendData(USART1,'U');
- while(usart_r==256);
- range+=usart_r*256; usart_r=256;
- while(usart_r==256);
- range+=usart_r; usart_r=256;
- return range;
- }
- //超聲波測距,多次測量濾波
- //參數是測量次數
- u16 Ultrasonic_ranging_s(u8 time)
- {
- u16 range=0,refer_range=0,sum_range=0,return_range=0;
- u8 num=0;
- range=Ultrasonic_ranging(); //先測一次得到參考值
- if((range>19)&&(range<4000))//當參考值大于19小于4000時正確
- {
- refer_range=range;
- for(;time>0;time--) //多測幾次,矯正參考值
- {
- range=Ultrasonic_ranging();
- if((range>19)&&(range<4000)&&((refer_range-range<10)||(range-refer_range<10)))//測量值在20到4000之間,且偏離參考值不超過10
- {
- sum_range+=range;
- num++;
- refer_range=(refer_range+range)/2;//用有效測量值矯正參考值
- }
- delay_ms(10);//消除余波的干擾
- }
- return_range=(sum_range+refer_range)/(num+1);//把參考值和多次測量得到的有效值取算數平均數,作為返回值;
- return return_range;
- }
- else{ return 0; }//如果超出4000mm返回0
- }
復制代碼- #include "system.h"
- #include "SysTick.h"
- #include "usart.h"
- #include "led.h"
- #include "tftlcd.h"
- #include "usart-ultrasonic.h"
- /*
- // 程序功能:使用US-100串口超聲波模塊測距,并濾波使測量值穩定
- // 芯片型號:STM32F103ZET6
- // 實驗平臺:普中PZ6806L開發板
- // 作者:XXK
- // 2018年10月20日
- */
- int main()
- {
- SysTick_Init(72);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- LED_Init();
- TFTLCD_Init();
- USART1_Init(9600);//超聲波測距模塊US-100使用的波特率是9600,不可更改
-
- while(1)
- {
- led1=!led1;
- LCD_ShowNum(50,50,(u32)Ultrasonic_ranging_s(3),4,24);//屏幕顯示測量值,單位毫米
- }
- }
復制代碼
所有資料51hei提供下載:
US-100串口超聲波測距.rar
(297.75 KB, 下載次數: 218)
2018-10-20 14:32 上傳
點擊文件名下載附件
|