一个使用红外接近开关,用平均速度测物体速度方法,但输出v为0,请问大神原因?
int HW=2;//红外接近开关void setup()
{pinMode(HW,INPUT);
Serial.begin( 9600 );
}
void loop()
{HW=digitalRead(2);
if (HW==LOW)
//挡光开始测量速度 hong
{ digitalWrite(led,LOW);
long IntervalTime=0; //定义一个时间变量
IntervalTime=pulseIn(HW, LOW);//用自带的函数采样反馈的低电平的宽度,单位us
float V=0.05/IntervalTime; //计算出速度
float V2=V*V;
float H=V/19.6;
Serial.println(H);//通过串口输出距离数值
H=0;IntervalTime=0;//对应的数值清零。
}
}
物体的长度L,经过红外开关引发的时间t,计算出来就是速度。
最好将红外开关连接到digital2 or digital3 使用中断进行触发(CHANGE)模式。 164335413 发表于 2016-7-15 09:38 static/image/common/back.gif
物体的长度L,经过红外开关引发的时间t,计算出来就是速度。
最好将红外开关连接到digital2 or digital3 使 ...
是不是由于红外由于挡光产生低电平,用pelseIn测出来的低电平,本身的信号不是持续低电平是有中断的所以导致测不出来?然后中断函数在上面的基础上,程序该如何修改的?摸索了很久,看了好些书,还是没找到办法?大神能帮帮忙吗? shijiaoguan 发表于 2016-9-1 16:38 static/image/common/back.gif
是不是由于红外由于挡光产生低电平,用pelseIn测出来的低电平,本身的信号不是持续低电平是有中断的所以导 ...
如果信号有中断,那就没有很好的办法去解决。保证你的物体是不断续的。如果改过代码,请贴出来。 间隔时间,有必要用中断么??? 建议你,要么不用pulsein函数,改用如果hw是low的话,读取当前上电时间,等待hw变为high然后再读取上电时间
或者你可以考虑串口输出一下IntervalTime的值,我认为v=0.05/IntervalTime语句有问题,建议你好好想想,1是int类型除以long类型会发生什么,2是你的IntervalTime值有多大,0.05除一下还会剩下多少?
页:
[1]