极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15671|回复: 5

一个使用红外接近开关,用平均速度测物体速度方法,但输出v为0,请问大神原因?

[复制链接]
发表于 2016-7-14 12:43:37 | 显示全部楼层 |阅读模式
  1. int HW=2;//红外接近开关
  2. void setup()
  3. {  pinMode(HW,INPUT);
  4. Serial.begin( 9600 );
  5. }
  6. void loop()
  7. {  HW=digitalRead(2);
  8. if (HW==LOW)
  9. //挡光开始测量速度 hong
  10. { digitalWrite(led,LOW);
  11.   long IntervalTime=0; //定义一个时间变量
  12.     IntervalTime=pulseIn(HW, LOW);//用自带的函数采样反馈的低电平的宽度,单位us
  13.     float V=0.05/IntervalTime; //计算出速度
  14.     float V2=V*V;
  15.     float H=V/19.6;
  16.     Serial.println(H);//通过串口输出距离数值
  17.     H=0;IntervalTime=0;//对应的数值清零。
  18.   
  19. }

  20. }
复制代码
回复

使用道具 举报

发表于 2016-7-15 09:38:49 | 显示全部楼层
物体的长度L,经过红外开关引发的时间t,计算出来就是速度。
最好将红外开关连接到digital2 or digital3 使用中断进行触发(CHANGE)模式。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-1 16:38:27 | 显示全部楼层
164335413 发表于 2016-7-15 09:38
物体的长度L,经过红外开关引发的时间t,计算出来就是速度。
最好将红外开关连接到digital2 or digital3 使 ...

是不是由于红外由于挡光产生低电平,用pelseIn测出来的低电平,本身的信号不是持续低电平是有中断的所以导致测不出来?然后中断函数在上面的基础上,程序该如何修改的?摸索了很久,看了好些书,还是没找到办法?大神能帮帮忙吗?
回复 支持 反对

使用道具 举报

发表于 2016-9-1 19:00:36 | 显示全部楼层
shijiaoguan 发表于 2016-9-1 16:38
是不是由于红外由于挡光产生低电平,用pelseIn测出来的低电平,本身的信号不是持续低电平是有中断的所以导 ...

如果信号有中断,那就没有很好的办法去解决。保证你的物体是不断续的。如果改过代码,请贴出来。
回复 支持 反对

使用道具 举报

发表于 2016-9-1 19:57:33 | 显示全部楼层
间隔时间,有必要用中断么???
回复 支持 反对

使用道具 举报

发表于 2016-9-6 22:38:05 | 显示全部楼层
建议你,要么不用pulsein函数,改用如果hw是low的话,读取当前上电时间,等待hw变为high然后再读取上电时间
或者你可以考虑串口输出一下IntervalTime的值,我认为v=0.05/IntervalTime语句有问题,建议你好好想想,1是int类型除以long类型会发生什么,2是你的IntervalTime值有多大,0.05除一下还会剩下多少?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 02:10 , Processed in 0.056289 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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