无法检测障碍物

[复制链接]
35|10
 楼主 | 2018-11-8 16:25 | 显示全部楼层 |阅读模式

void main (void)
{
unsigned char i,pulse_num;

Init_Timer0();
IRSend_A=0; //关闭2个发射管
IRSend_B=0;
while (1)   //主循环
  {
  if(Flag)
    {
        pulse_num=0;   //脉冲计数
        for(i=0;i<30;i++)
                 {
             IRSend_A=1;//打开A发射
                DelayUs2x(150);
                 if(! IRRev)
                           pulse_num++;
            IRSend_A=0;//关闭A发射
             DelayUs2x(150);
                }

        if(pulse_num>25)
           LED_A=0;//如果判断有障碍,点亮LED_A指示,否则熄灭
        else
           LED_A=1;

    pulse_num=0;//清零脉冲计数
   
        for(i=0;i<30;i++)
                 {
             IRSend_B=1;//打开B发射
                 DelayUs2x(150);
                 if(! IRRev)
                      pulse_num++;
             IRSend_B=0;//关闭B发射
             DelayUs2x(150);
                }

        if(pulse_num>25)
           LED_B=0;//如果判断有障碍,点亮LED_B指示,否则熄灭
        else
           LED_B=1;
        }
  }
}
不明白为什么上面的DelayUs2x(150)必须是150;不然就无法检测障碍物
| 2018-11-8 16:32 | 显示全部楼层
可能,是这样。

如果前方近距离有障碍物,
则红外光返回的时间短。也就是经过DelayUs2x(150);时间,即能返回。
| 2018-11-8 16:35 | 显示全部楼层

如果,前方没有障碍物,则红外光线也可能返回到接收管子,不过时间较长。
经过一定时间,接收管,也能接收到。
| 2018-11-8 16:38 | 显示全部楼层
嗯,如果延时太长了,不管是有没有障碍物,都能接收到反射光。这样就无法判断有没有障碍了。
 楼主 | 2018-11-8 16:44 | 显示全部楼层
不对啊 ,我用了两个led模拟显示接收信号,如果不是150,是基本不会有接收信号的,换句话说,即使前面近距离存在障碍,也没有红外反射信号传回来
| 2018-11-8 16:48 | 显示全部楼层
先确定一下这个延时的时间有多长,等光返回的时间说法不靠谱,你单片机的速度不可能跑过光速吧?
| 2018-11-8 16:55 | 显示全部楼层
有可能是等接收管信号输出的时间,检查你接收端的上拉电阻多大,再用示波器测一下上升沿速度。
| 2018-11-8 16:58 | 显示全部楼层
延时大约150us,R35,100其他得版主可以说的简单点摸,懂的不怎么深
| 2018-11-8 17:02 | 显示全部楼层

端口上的电平变化不可能瞬间完成,因为有寄生电容,实际上就是个RC过程。
| 2018-11-8 17:06 | 显示全部楼层
端口电平变化是有一个过程,但好像也不需要150us。
 楼主 | 2018-11-8 17:09 | 显示全部楼层
嗯,好的,我知道了
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表