/*
* 割り込み処理サンプル
* 青ボタン押下中は赤ボタンの入力を受け付けない
*/
// ピン番号を定数として定義
const int LED_LOOP = 7;
const int BTN_LOOP = 6;
const int LED_INT = 4;
const int BTN_INT_0 = 2;
const int BTN_INT_1 = 3;
void setup() {
// ループ処理側(赤)の設定
pinMode(LED_LOOP, OUTPUT);
pinMode(BTN_LOOP, INPUT_PULLUP);
// 割り込み処理側(青)の設定
pinMode(LED_INT, OUTPUT);
pinMode(BTN_INT_0, INPUT_PULLUP);
pinMode(BTN_INT_1, INPUT_PULLUP);
// 割り込み設定
// 引数1 → 割り込み番号
// 引数2 → 割り込み関数
// 引数3 → トリガーの種類
attachInterrupt(0, change_led_lighting, LOW); // 青ボタンが押されたときの割り込み処理を設定
attachInterrupt(1, change_led_lightsout, HIGH); // 青ボタンを押していないときの割り込み処理を設定
// LED消灯
digitalWrite(LED_LOOP, LOW);
digitalWrite(LED_INT, LOW);
Serial.begin(115200);
}
void loop() {
Serial.println("ループ処理中");
if (digitalRead(BTN_LOOP) == LOW) // 赤ボタンが押されたとき
{
// 赤LED点灯
digitalWrite(LED_LOOP, HIGH);
}
else
{
// 赤LED消灯
digitalWrite(LED_LOOP, LOW);
}
delay(100);
}
// 青LED点灯関数
void change_led_lighting() {
Serial.println("割り込み処理(ボタン押下)");
digitalWrite(LED_INT, HIGH);
delay(100);
}
// 青LED消灯関数
void change_led_lightsout() {
Serial.println("割り込み処理(ボタン解放)");
digitalWrite(LED_INT, LOW);
delay(100);
}
LOOP
INTERRUPT