08_SW-LED-Interrupt

割り込みでLEDを切り替える

割り込み処理を使い、スイッチを押すたびにLEDの状態を切り替えます。

スイッチモジュールLEDモジュール
1

準備する

CherryIoTとモジュールを接続する

CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。

スイッチモジュール

スイッチモジュール

接続先:A

LEDモジュール

LEDモジュール

接続先:B

2

サンプルコード

GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。

08_SW-LED-Interrupt.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

上のサンプルコードをコピーし、Arduino IDEに貼りつけます。

ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。

初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。

4

動作確認

スイッチを押すたびに、LEDの点灯と消灯が切り替わるなら成功です。

5

コードの解説

attachInterruptでスイッチの変化を監視し、割り込み関数でLEDの状態を反転します。

08_SW-LED-Interrupt.ino
GitHubで開く
GitHubからコードを読み込んでいます...

const int swPin = 3;コネクタAのスイッチに対応するGPIO3を、定数swPinへ保存します。

const int ledPin = 4;コネクタBのLEDに対応するGPIO4を、定数ledPinへ保存します。

bool ledState = 0;LEDの点灯状態を覚えておくため、bool型の変数ledStateを用意します。初期値は0、つまりfalseなので、最初は消灯状態です。

void setup() {setup関数は電源投入時やリセット時に1回だけ実行されます。ここで端子と割り込み処理の初期設定を行います。

pinMode(swPin, INPUT);スイッチから届く信号を読み取れるように、swPinをINPUT(入力)に設定します。

pinMode(ledPin, OUTPUT);LEDへ信号を送れるように、ledPinをOUTPUT(出力)に設定します。

attachInterrupt(swPin, LED_blink, FALLING);スイッチ端子swPinの信号がHIGHからLOWへ変わった瞬間に、通常のloop処理を一時的に中断してLED_blink関数を実行するよう登録します。これを割り込みと呼び、loop関数がどこを処理していても端子の変化へすぐ反応するために使います。FALLINGはHIGHからLOWへの変化を検出する指定です。

void loop() {loop関数は繰り返し実行されます。ここではledStateに記録された状態を、実際のLEDへ反映し続けます。

digitalWrite(ledPin, ledState);ledStateがtrueならHIGH、falseならLOWとしてLED端子へ出力します。割り込み処理でledStateが切り替わるたびに、LEDの点灯と消灯も切り替わります。

void LED_blink(){LED_blinkは、attachInterruptで登録した割り込み関数です。スイッチ端子の変化が検出されたときだけ呼び出され、LEDの状態を切り替えます。

delay(10);0.01秒待ちます。

ledState = !ledState;現在のledStateを反転します。falseならtrue、trueならfalseになるため、スイッチを押すたびにLEDの消灯と点灯が切り替わります。