Arduino 日本語リファレンス


attachInterrupt(interrupt, function, mode)

原文

外部割り込みが発生したときに実行する関数を指定します。すでに指定されていた関数は置き換えられます。呼び出せる関数は引数と戻り値が不要なものだけです。ピンの割り当てはボードによって異なります。UnoとLeonardoで有効な割り込み番号(int.0~)と、それに対応するピン番号は下記のとおりです。

Uno: pin2(int.0) pin3(int.1)
Leonardo: pin3(int.0) pin2(int.1) pin0(int.2) pin1(int.3) pin7(int.4)

【パラメータ】

interrupt: 割り込み番号
function: 割り込み発生時に呼び出す関数
mode: 割り込みを発生させるトリガ

LOW ピンがLOWのとき発生
CHANGE ピンの状態が変化したときに発生
RISING ピンの状態がLOWからHIGHに変わったときに発生
FALLING ピンの状態がHIGHからLOWに変わったときに発生

【戻り値】

なし

【補足】

attachInterruptで指定した関数のなかでは次の点に気をつけてください。

・delay関数は機能しません
・millis関数の戻り値は増加しません
・シリアル通信により受信したデータは、失われる可能性があります
・割り当てた関数のなかで値が変化する変数にはvolatileをつけて宣言すべきです

【割り込みの使い方】

割り込みはプログラムのなかで物事が自動的に発生するようにしたいときに便利です。また、タイミングの問題を解決してくれます。割り込みに適したタスクは、ロータリエンコーダの読み取りやユーザーからの入力の監視などです。

割り込みを使わずにロータリエンコーダからのパルスを漏らさず受け取ろうとすると、入力を監視するトリッキーな処理が必要です。サウンドセンサでクリック音を検知したり、フォトインタラプタでコインが落ちるのを検出するときも同様です。そうした処理を実装するとき、割り込みを使えば、他の処理を実行しながら突然発生するイベントを処理することができます。


【例】

ピン2の状態の変化に合わせてLEDを点滅させます。

int pin = 13;
volatile int state = LOW;

void setup() {
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop() {
  digitalWrite(pin, state);
}

void blink() {
  state = !state;
}



[目次へ戻る]

Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください [Arduino wiki]