組み込み系

Arduinoによるハードウエアー割り込みの処理

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専用)

 

タイトルとURLをコピーしました