使用node.js和onoff提高Raspberry Pi上LED闪烁的速度

使用node.js和onoff提高Raspberry Pi上LED闪烁的速度,node.js,twitter,raspberry-pi,gpio,led,Node.js,Twitter,Raspberry Pi,Gpio,Led,我试图通过使用变量“counter”来改变间隔 Twitter流正在工作,LED闪烁 我已删除所有twitter凭据 任何帮助都将不胜感激 这是我的密码: var Gpio = require('onoff').Gpio; var Twit = require('twit'); var T = new Twit({ consumer_key: '' // Your Consumer Key , consumer_secret: '' // Your Co$

我试图通过使用变量“counter”来改变间隔

Twitter流正在工作,LED闪烁

我已删除所有twitter凭据

任何帮助都将不胜感激

这是我的密码:

var Gpio = require('onoff').Gpio;
var Twit = require('twit');
var T = new Twit({
    consumer_key:         '' // Your Consumer Key
  , consumer_secret:      '' // Your Co$
  , access_token:         '' // Your Ac$
  , access_token_secret:  '' // Your Access $
});

var stream = T.stream('statuses/filter', { track: '#blessed, #peace'})

led = new Gpio(17, 'out'),
counter = 500;

stream.start();

var iv = setInterval(function(){
        led.writeSync(led.readSync() === 0 ? 1 : 0);
}, counter);


stream.on('tweet', function(tweet) {

        if(tweet.text.indexOf('#blessed') > -1) {
                console.log("blessed");

                counter += 100;

            }  else if (tweet.text.indexOf('#peace') > -1) {

                console.log("peace");
                counter -= 100;

            }

});

一旦您进行了
setInterval()
调用,计时器就会锁定,您无法更改它。函数的参数就是这样工作的:在事实发生后更改它们不会产生任何效果。提供的值没有绑定,数字作为副本传入

您需要清除并重新设置计时器
setInterval()
返回一个句柄,您可以通过它传递到
clearInterval()
将其关闭。您已经捕捉到了这一点,因此只需使用它:

var iv;

function blink(interval) {
  if (iv) {
    clearInterval(iv);
  }

  iv = setInterval(function() {
    led.writeSync(led.readSync() === 0 ? 1 : 0);
  }, interval);
}
然后使用此功能将其重置:

counter -= 100;
blink(counter);

只需确保不会出现负值。

我在计数器和间隔中添加了一个检查:

var Gpio = require('onoff').Gpio;
var Twit = require('twit');
var T = new Twit({
    consumer_key:         '' // Your Consumer Key
  , consumer_secret:      '' // Your Co$
  , access_token:         '' // Your Ac$
  , access_token_secret:  '' // Your Access $
});

var stream = T.stream('statuses/filter', { track: '#blessed, #peace'})

led = new Gpio(17, 'out'),
counter = 200;

stream.start();

var iv;

function blink(interval) {
  if (iv) {
    clearInterval(iv);
  }
if (interval <= 100) {

interval = 100;

}
console.log("interval = " + interval);

iv = setInterval(function(){
        led.writeSync(led.readSync() === 0 ? 1 : 0);
}, interval);

}

stream.on('tweet', function(tweet) {

        if(tweet.text.indexOf('#blessed') > -1) {
                console.log("blessed");


                counter += 100;
                    if (counter <= 100) {
                counter = 100;
}
                console.log(counter);
                blink(counter);

            }  else if (tweet.text.indexOf('#peace') > -1) {

                console.log("peace");
                counter -= 100;
                if (counter <= 100) {
                counter = 100;
                }
                console.log(counter);
                blink(counter);

            }

});
var Gpio=require('onoff').Gpio;
var Twit=需要('Twit');
var T=新Twit({
使用者密钥:“”//您的使用者密钥
,消费者的秘密:“//您的公司$
,访问\u令牌:“”//您的Ac$
,访问\u令牌\u密钥:“”//您的访问权限$
});
var stream=T.stream('status/filter',{track:'#祝福,#和平')
led=新Gpio(17,'输出'),
计数器=200;
stream.start();
var iv;
功能闪烁(间隔){
如果(iv){
间隙(iv);
}
如果(间隔-1){
控制台日志(“祝福”);
计数器+=100;
如果(计数器-1){
控制台日志(“和平”);
计数器-=100;

如果(计数器I)添加在计数器和间隔的检查中: