[求助]关于AVR单片机和机器人开发技术的问题2
各位高手,小弟正在基于AVR单片机开发一款智能小车,正在开发超声波测距兼避障功能,测试发现测距的数据超出有效范围。调试发现如果屏蔽掉避障操作,只是保留超声波测距功能,则距离数据可以正确显示。同时,调试发现:计算距离是通过外部中断2实现的,用定时器计数,数值过大。请教其中的原因。主函数部分代码如下:
void main(void)
{
MCUCSR |= BIT(7);
MCUCSR |= BIT(7);
init_devices();
while(1)
{
LCD_write_string(0,0,"CCFROBOT");
LCD_write_string(12,0,"CSB");
LCD_write_string(0,1,"SPACE:");
CSB_data=CSB_data*1.72*8/100;
if (CSB_data> 400)
{
LCD_write_string(7,1,"Err!");
}
else
{
change(CSB_data,Data);
LCD_write_string(7,1,Data);
LCD_write_string(12,1,"CM");
}
start_SB();
if ((L_BZ!=0)&&(CSB_data> =20)&&(R_BZ!=0))
{
pwm(250,250);
forward;
}
else if ((L_BZ!=0)&&(CSB_data <=20)&&(R_BZ!=0))
{
pwm(220,250);
back;
delay_nms(5);
}
else if((L_BZ==0)&&(CSB_data <=20)&&(R_BZ==0))
{
pwm(220,250);
back;
delay_nms(5);
}
else if((L_BZ==0)&&(CSB_data <=20)&&(R_BZ!=0))
{
pwm(250,250);
right;
delay_nms(5);
}
else if((L_BZ==0)&&(CSB_data> =20)&&(R_BZ!=0))
{
pwm(250,250);
right;
delay_nms(5);
}
else if((L_BZ==0)&&(CSB_data <=20)&&(R_BZ!=0))
{
pwm(250,250);
right;
delay_nms(5);
}
else if((L_BZ!=0)&&(CSB_data> =20)&&(R_BZ==0))
{
pwm(250,250);
left;
delay_nms(5);
}
else if((L_BZ!=0)&&(CSB_data <=20)&&(R_BZ==0))
{
pwm(250,250);
left;
delay_nms(5);
}
delay_nms(150);
}
}
发表时间:2014年9月16日10:04:43