2014-09-06 85 views
0

我在树莓派和模块onoff上使用节点来获取输入。 我只想运行函数B,如果A功能是在一分钟内按频率过滤输入

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); 

叫了两声但是,这是行不通的。

回答

2

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

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

甚至更​​好,不要使用日期对象,只是时代米利斯这样的:

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

那么你的“时间”是一个类似于整数的数量,匹配你的超时。