|
几十个cm测量出量跳动很小,基本上可以接受
100多cm的距离后,计算出的数据就几十cm的跳动,啥原因啊
/*
* 函数名:UltrasonicWave_StartMeasure
* 描述 :开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
* 输入 :无
* 输出 :无
*/
void UltrasonicWave_StartMeasure(void)
{
DWORD dwRetry=0;
//CPU_SR_ALLOC();
//CPU_CRITICAL_ENTER();
GPIO_SetBits(TRIG_PORT,TRIG_PIN); //送>10US的高电平
DelayTime_us(20); //延时20US
GPIO_ResetBits(TRIG_PORT,TRIG_PIN);
while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)) //等待高电平
{
if(++dwRetry>RETRY_TIMES)
{
return;
}
}
dwRetry=0;
TIM_SetCounter(TIM2,0);
TIM_Cmd(TIM2, ENABLE); //开启时钟
while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)) //等待低电平
{
if(++dwRetry>RETRY_TIMES)
{
TIM_Cmd(TIM2, DISABLE); //定时器2失能
return;
}
}
TIM_Cmd(TIM2, DISABLE); //定时器2失能
//CPU_CRITICAL_EXIT();
UltrasonicWave_CalculateTime(); //计算距离
TIM_SetCounter(TIM2,0);
printf("\r\ndistance:%d%d cm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256);
//printf("\r\ndistance:%f cm\r\n",UltrasonicWave_Distance);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|