在龙邱的库上、使用超声波模块。
根据时序图,只要给Trig引脚一个10us以上的高电平就可以引发模块发出一串超声波脉冲,这个时候只要测得Echo引脚是高电平、就可以开始计时了,当超声波模块接收到返回的高电平时,Echo引脚会被拉低,这时结束定时,根据这段时间就可以计算出距离。
下面展示一些 关键代码
。
while (1) //主循环
{
delayms(25); //没什么用,超声波多长时间工作一次
PIN_Write(Trig,1);
delayus(20); //拉高延时高于10us
PIN_Write(Trig,0);
while(PIN_Read(Echo)==0);
systick_start(STM1); //STM定时器
while(PIN_Read(Echo)==1);
time=systick_getval_us(STM1); //读取定时器时间
char txt[13]; //显示屏显示值
sprintf(txt, "distant: %07d", distant);
TFTSPI_P8X16Str(0, 2, txt, u16BLACK, u16WHITE);
delayms(25);
}
下面展示一些 初始化
。
#define Echo P33_10
#define Trig P33_13
delayms(5000); //初始化中要延时!否则超声波模块不工作
讨论点:
1.超声波模块应该采集多次求平均值。其中的滤波可以采用多种方法。
2.计算距离用 时间*音速/2就可以算出。
版权声明:本文为zerokingwang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。