読者です 読者をやめる 読者になる 読者になる

気ままにIoTメモ

Iotに関わること関わらないこと備忘録

ラズパイでスイッチ入力(割り込み)

前回のラズパイでのスイッチ入力に続いて割り込みバージョンを試してみました。

var wpi = require('wiring-pi');
wpi.setup('wpi');

var led_pin = 7;
var sw_pin = 1;

wpi.pinMode(led_pin, wpi.OUTPUT);
wpi.pinMode(sw_pin, wpi.INPUT);
wpi.pullUpDnControl(sw_pin,wpi.PUD_UP);

var led = 1;

wpi.wiringPiISR(sw_pin, wpi.INT_EDGE_FALLING, function() {
    setTimeout(function () {
        if(wpi.digitalRead(sw_pin) == wpi.LOW) {
            led = (led)? 0 : 1;
            wpi.digitalWrite(led_pin, led);
        }
    }, 10);
});

JavaScriptっぽく書けているかは謎ですが、行数も減りました(少し読みにくくなった)。
チャタリング対策もしており、ポーリング版と同じ動作を確認しました。

割り込みのコード自体も簡単に書ける上に、割り込みするエッジも指定できてホント楽です。

LearningWiring/03_button_isr at master · hsgwa/LearningWiring · GitHub

2017/01/08 追記
sw_pin=0の場合,
wiringPiISR: unable to open /sys/class/gpio/gpio17/value: No such file or directory
と言われてしまうのでsw_pin=1に変更しました。
次を参考にアップデート色々してみましたが特に直らず。
Updating Raspbian on your microSD for the Raspberry Pi 2

java - wiringPiISR: unable to open /sys/class/gpio/gpio18/value: No such file or directory - Stack Overflow
似たようなエラーはあるようですが、分からないので放置。