2014-09-06 9 views
0

Я использую узел на малине pi и модуле onoff для ввода. Я хочу работать только функцию 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); 

Но это не работает.

ответ

2

Если вы измените свои оценки даты на миллисекунды в соответствии с вашим тайм-аутом (int to int), тогда ваши сравнения дат будут работать. что-то вроде этого:

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

Или еще лучше, не использовать объект даты, только эпоха Миллис, как это:

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

Тогда ваши «времена» целое число, как число, соответствие ваш тайм-аут.

Смежные вопросы