初级会员
- 积分
- 103
- 金钱
- 103
- 注册时间
- 2018-11-19
- 在线时间
- 20 小时
|
4金钱
超声波模块能否在外部中断里多次检测与障碍物的距离?
void EXTI9_5_IRQHandler(void)
{
delay_us(10);
if(EXTI_GetITStatus(EXTI_Line6)!=RESET)
{
while(i != 5)
{
TIM_SetCounter(TIM3,0);
TIM_Cmd(TIM3,ENABLE);
while(GPIO_ReadInputDataBit(GPIOE,Echo)); //等待低电平 等待到以后停止计时
TIM_Cmd(TIM3,DISABLE);
i += 1; //每次检测到回响型号,+1,五次取平均
Distance=TIM_GetCounter(TIM3)*340/2000.0; //72M预分频,所以得到的计时器的1等于1ms
sum = Distance + sum;
delay_ms(1);
}
Distance = sum / 5;
if(Distance > 15) //15
{
LED0=1; // 1 >50
ENA=1;
ENB=1;
delay_ms(500);
}
else
{
LED0=0; //距离小于15则红灯亮,同时电机只保留一个转动 1 >50
ENA=0; //通过控制一个电机停止,另一个电机继续转动实现转弯
delay_s(1);
}
EXTI_ClearITPendingBit(EXTI_Line6);
}
}
如图,在外部中断的基础上使用while循环进行多次测量,不知道这么写对不对,哪里缺了吗?
现在超声波检测到的结果是一直都是小于设定值。求帮助。
|
|