javascript - 按频率过滤输入(开关去抖)

标签 javascript node.js io raspberry-pi rate-limiting

我正在树莓派上使用 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/

相关文章:

haskell - 为什么 Template Haskell 在编译期间允许任意 IO 操作?

java I/O 尝试使用二进制数据参数的资源吗?

javascript - 如何在纯 Javascript 中的 PHP AJAX 调用中使用 header 重定向?

php - 谷歌地图 - 商店定位器 - 多个过滤器 - 数据库与客户端

javascript - 为具有需要编译的静态 Assets 的项目推荐的 Go 项目结构和构建系统?

javascript - 在模板引擎中渲染页面后获取页面的源代码?

node.js - 是否可以在 github api 中查询用户作为​​协作者的任何存储库?

node.js - Meteor 在 Telescope windows 8 中无法工作

c++ - Linux 上 C++ 应用程序的磁盘 IO 分析器

javascript - 访问嵌入式 JSON 的深层对象成员