我正在树莓派上使用 Node 和模块 onoff 来获取输入。 我只想在一分钟内调用函数 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);
但这行不通。
最佳答案
如果您将日期评估更改为毫秒以匹配您的超时(int 到 int),那么您的日期比较将起作用。像这样的东西:
timeOfLastChange.getTime() > (currentTime.getTime() - timeout)
或者更好的是,不要使用日期对象,只使用纪元,如下所示:
currentTime = Date.now();
timeOfLastChange = Date.now();
那么你的“时间”是一个类似整数的数字,与你的超时相匹配。
关于javascript - 按频率过滤输入(开关去抖),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25700437/