ボタンをRaspberryPiGPIOポートに接続しました。
pi-gpio node jsモジュールでは、現在のステータスを取得することのみが許可され、状態の変更を待機することはできません。
gpio.read(16, function(err, value) {
if(err) throw err;
console.log(value); // The current state of the pin
});
イベントを非同期にバインドするソリューションはありますか?
この例では、これはボタンが押されたときです。
残念ながら、ハードウェアGPIOの使用時にイベントは生成されません。エミッターとsetInterval
を使用してイベントを作成し、ステータスを頻繁にチェックしてからアプリケーションにイベントを送信するタイマーを作成できます。
var ee = new process.EventEmitter(),
buttonState;
ee.on('stateChange', function(previousValue, value){
console.log('button state changed from', previousValue, 'to', value);
});
setInterval(function(){
gpio.read(16, function(err, value) {
if(err){
ee.emit('error', err);
} else{
if(buttonState !== value){
var previousState = buttonState;
buttonState = value;
ee.emit('stateChange', previousState, value);
}
}
});
}, 50); //check button state every 50ms
タイマーを要件に合わせて調整できます。 50msの方が速いと人間の目では違いを検出できないので、50msが良い数値だと思います。