表題の通り、Arduino Nanoで外部割込みのテストをしてみた。
ここを読めば全部書いてある。
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
外部割込みに使えるピンは328系のArduinoでは2と3のようだ。
スケッチのサンプルも上のリンク先に書いてあるのがそのまま使える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
const byte ledPin = 13; const byte interruptPin = 2; volatile byte state = LOW; void setup() { pinMode(ledPin, OUTPUT); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE); } void loop() { digitalWrite(ledPin, state); } void blink() { state = !state; } |
D2にタクトスイッチを取り付け、押してみてD13のLEDの点滅をみる。
Nano上に最初から載っているLEDがD13につながっているので、写真の赤いLEDは本来は不要だ。
タクトスイッチまわりの回路図は以下のようにした。
上のスケッチでは引数にCHANGEが指定してあるので、ボタンを押すと点灯し、離すと消灯する。
押したらHighからLowへ変化し、離すとLowからHighへ変化するのだが、とにかくその「変化」を捉えてLEDの点灯と消灯が繰り返されるわけだ。
幾度かボタンを押してみると分かるが、たまに点灯・消灯が逆転する。
これは、スイッチのチャタリングを拾ってしまっているからだと思われる。
RISINGにすると、ボタンを押し込んでも変化しないが、離すと変化する。
離してLowからHighへ変化したときにだけ反応する。
FALLINGにすると、ボタンを押し込んだときに変化して、離しても変化しない。
押し込んでHighからLowへ変化したときにだけ反応する。
LOWの設定もあるようだが、私の環境では思ったような動作にはならなかった。
そもそも、どういう状況で使うのか良く分からない。