attachInterrupt(割り込み番号, 関数名, 割り込みモード)
Arduinoの用意されている便利関数では、限られたピン番号ではあるが外部割込みをかけることができる。
※ここで便利関数と書いたのは、実のところは、もっと下位のレベルでは全部のIOピンに割り込みをかけることができる。(ここのブログにそれらしきことが書いてある。)
sample
int pin = 13; volatile int state = LOW; void SwLED() { state = !state; } void setup() { pinMode(pin, OUTPUT); attachInterrupt(digitalPinToInterrupt(2), LEDOn, LOW ); } void loop() { digitalWrite(pin, state); }
引数について
1.割り込み番号
デジタルピンに対応した割り込みの番号を指定。
Board | int.0 | int.1 | int.2 | int.3 | int.4 | int.5 |
Uno, Ethernet | 2 | 3 | ||||
Mega2560 | 2 | 3 | 21 | 20 | 19 | 18 |
32u4 based (e.g Leonardo, Micro) | 3 | 2 | 0 | 1 | 7 |
または
Uno、Nano、Mini、他の328ベースのボード | 2、3 |
Mega、Mega2560、MegaADK | 2、3、18、19、20、21 |
Micro、Leonardo、他の32u4ベースのボード | 0、1、2、3、7 |
Zero | 4番ピン以外のすべてのデジタルピン |
Due | すべてのデジタルピン |
2.飛び先関数名
引数、戻り値のないvoid型の関数を用意し、本関数内で使用する変数は volatile を使用する。
また、本関数内では、シリアルデータによる受信やdelay()やmillis()などは正しく動作しない。
3.発生割り込みモード
信号がどんなモードのときに割り込みを発生させるかを指定する。
LOW…信号がLOWのとき
RISING….信号がLOWからHIGHに立ち上がったとき
FALLING….信号がHIGHからLOWにたち下がったとき
HIGH….信号がHIGHのとき (Arduino Due、Zero専用)