按频率过滤输入
问题描述:
我在树莓派和模块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);
叫了两声但是,这是行不通的。
答
如果您将日期评估更改为毫秒以匹配您的超时(int为int),那么您的日期比较将起作用。是这样的:
timeOfLastChange.getTime() > (currentTime.getTime() - timeout)
甚至更好,不要使用日期对象,只是时代米利斯这样的:
currentTime = Date.now();
timeOfLastChange = Date.now();
那么你的“时间”是一个类似于整数的数量,匹配你的超时。