割り込み

外部端子からの信号で処理する割り込み関数や、割り込み関数の有効、無効を指定するライブラリです。
GR-ADZUKIではピン2, ピン3がボタンスイッチに割り当たっており、押したときに割込みを発生することができます。

attachInterrupt

概要
外部端子からの信号に応じて実行する関数を指定します。割り込み0はピン2、割り込み1はピン3に対応しています。呼び出せる関数は引数と戻り値が不要なものだけです。
文法
attachInterrupt(unsigned char interrupt, void(*)(void) func, int mode)
パラメータ
interrupt: 割り込み番号0か1か2 (0: ピン2、1: ピン3、2:ピン25)
function: 割り込み発生時に呼び出す関数
mode: CHANGE(ピンの状態が変化したとき発生)、FALLING(ピンの状態がHIGHからLOWに変化したとき発生)、RISING(ピンの状態がLOWからHIGHに変化したとき発生)
戻り値
なし
補足
modeにLOWは指定できません。指定した場合はCHANGEが指定されます。
割り込み関数実行中は、割込み禁止状態となり、システム上使用される他の関数が実行されないため、delay()、millis()、Serial()など正常に機能しません。割込み処理の先頭でinterrupts()を実行すれば回避できます。

detachInterrupt

概要
attachInterruptで指定した割り込みを解除します。
文法
detachInterrupt(unsigned char interrupt)
パラメータ
interrupt: 割り込み番号0か1
戻り値
なし

interrupts

概要
noInterruptsで無効にした割り込みを再度許可します。
文法
interrupts()
パラメータ
なし
戻り値
なし

noInterrupts

概要
割り込み処理を禁止します。バックグラウンドで実行する重要なタスクも禁止されるため、どうしてもタイミングを崩したくない処理を行うときに使用してください。
文法
noInterrupts()
パラメータ
なし
戻り値
なし

サンプルプログラム

GR-ADZUKIのボタンスイッチを押したらLEDが赤く光るサンプル.


#include <Arduino.h>
void sw1_push(){
  digitalWrite(12, HIGH);
  delayMicroseconds(100000); // 100ms
  digitalWrite(12, LOW);
}
void sw2_push(){
  digitalWrite(13, HIGH);
  delayMicroseconds(100000); // 100ms
  digitalWrite(13, LOW);
}
 
void setup() {
  pinMode(3, INPUT_PULLUP); // for sw1
  pinMode(2, INPUT_PULLUP); // for sw2
  attachInterrupt(1, sw1_push, FALLING);
  attachInterrupt(0, sw2_push, FALLING);
    
  pinMode(12, OUTPUT);
  digitalWrite(12, LOW);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
}
   
void loop() {
}