Arduino日本語リファレンス



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

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

【割り込みの使い方】

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

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


【例】

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

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;      // volatileをつけて宣言

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  // ピン番号から割り込み番号への変換には専用の関数を使用
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

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

// 割り込みサービスルーチン(ISR)
void blink() {
  state = !state;
}



[目次へ戻る]

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