按频率过滤输入

时间:2014-09-06 12:48:39

标签: javascript node.js io raspberry-pi

我在raspberry pi和模块onoff上使用node来获取输入。 如果函数A在一分钟内被调用两次,我想只运行函数B

var gpio = require('onoff').Gpio;
var sensor = new gpio(7, 'in', 'falling');
var timeout = 60000;
var timeOfLastChange;
sensor.watch(function(err, value) {
    console.log('Sensor value is now '+ value);
    var currentTime = new Date(); //2 tick filter
    if(value == false && timeOfLastChange < currentTime - timeout) var timeOfLastChange = new Date();
    if(timeOfLastChange > currentTime - timeout) functionB();  
});
gpio.setup(7, gpio.DIR_IN);

但这不起作用。

1 个答案:

答案 0 :(得分:2)

如果您将日期评估更改为毫秒以匹配您的超时(int到int),那么您的日期比较将起作用。像这样的东西:

timeOfLastChange.getTime() > (currentTime.getTime() - timeout)

或者甚至更好,不要使用日期对象,只需要这样的纪元:

currentTime = Date.now();
timeOfLastChange = Date.now();

然后你的'时间'是一个类似整数的数字,与你的超时相匹配。