标题:
STM32F1控制US-100串口超声波测距源码
[打印本页]
作者:
XXK
时间:
2018-10-20 11:39
标题:
STM32F1控制US-100串口超声波测距源码
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 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
Alex_12
时间:
2019-8-4 09:36
谢谢楼主
作者:
小安阿达
时间:
2019-8-9 11:23
我想要这个代码
作者:
aaaaaa。
时间:
2019-8-12 09:44
这个代码没问题吗?为什么我的没东西
作者:
wxyz
时间:
2020-4-14 14:56
谢谢楼主提供的代码!
作者:
了咖啡公平
时间:
2020-4-20 18:35
aaaaaa。 发表于 2019-8-12 09:44
这个代码没问题吗?为什么我的没东西
串口发送数据换成
0x55
作者:
Bruce1111111
时间:
2020-11-5 09:26
请问用这个程序,超声波传感器的Trig,Echo这两个脚应该接那两个IO
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1