无法检测障碍物

[复制链接]
637|10
手机看帖
扫描二维码
随时随地手机跟帖
songqian17|  楼主 | 2017-8-12 11:08 | 显示全部楼层 |阅读模式

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;不然就无法检测障碍物
chenho| | 2017-8-12 11:11 | 显示全部楼层
可能,是这样。

如果前方近距离有障碍物,
则红外光返回的时间短。也就是经过DelayUs2x(150);时间,即能返回。

使用特权

评论回复
huwr| | 2017-8-12 11:14 | 显示全部楼层

如果,前方没有障碍物,则红外光线也可能返回到接收管子,不过时间较长。
经过一定时间,接收管,也能接收到。

使用特权

评论回复
huanghuac| | 2017-8-12 11:16 | 显示全部楼层
嗯,如果延时太长了,不管是有没有障碍物,都能接收到反射光。这样就无法判断有没有障碍了。

使用特权

评论回复
songqian17|  楼主 | 2017-8-12 11:21 | 显示全部楼层

不对啊 ,我用了两个led模拟显示接收信号,如果不是150,是基本不会有接收信号的,换句话说,即使前面近距离存在障碍,也没有红外反射信号传回来

使用特权

评论回复
bqyj| | 2017-8-12 11:23 | 显示全部楼层
先确定一下这个延时的时间有多长,等光返回的时间说法不靠谱,你单片机的速度不可能跑过光速吧?

使用特权

评论回复
wenfen| | 2017-8-12 11:25 | 显示全部楼层
有可能是等接收管信号输出的时间,检查你接收端的上拉电阻多大,再用示波器测一下上升沿速度。

使用特权

评论回复
zhuhuis| | 2017-8-12 11:27 | 显示全部楼层

延时大约150us,R35,100其他得版主可以说的简单点摸,懂的不怎么深

使用特权

评论回复
tian111| | 2017-8-12 11:28 | 显示全部楼层
端口上的电平变化不可能瞬间完成,因为有寄生电容,实际上就是个RC过程。

使用特权

评论回复
tian111| | 2017-8-12 11:31 | 显示全部楼层
端口电平变化是有一个过程,但好像也不需要150us。

使用特权

评论回复
songqian17|  楼主 | 2017-8-12 11:35 | 显示全部楼层

嗯,好的,我知道了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

463

主题

5749

帖子

1

粉丝