ESP8266 割り込み使って Lチカ

 ESP-WROOM-02(以後 ESP8266) に LED と タクトスイッチ を取り付けた記事 を書きました。
 とりあえずの目標はガイガーカウンター(モニタリングポスト)化させることですが、それには割り込み処理が欠かせません。


 ということで割り込みの練習ソースを書いてみました。
(LED と タクトスイッチ の接続ピンは 前回 のを前提にします)


割り込みを使って LED 点滅

#include "Ticker.h"
Ticker ticker;

void setup() {
  // put your setup code here, to run once:
  pinMode(15, OUTPUT);
  ticker.attach(0.5, blink);
}

void loop() {
  // put your main code here, to run repeatedly:
}

void blink() {
  volatile static int flag = HIGH;
  digitalWrite(15, flag);
  flag = !flag;
}

 0.5秒おきに割り込みをかけ、点灯/消灯 を繰り返します。


もう少し高度な光らせ方

#include "Ticker.h"
Ticker ticker;

void setup() {
  // put your setup code here, to run once:
  pinMode(0, INPUT);
  pinMode(15, OUTPUT);
  attachInterrupt(0, blink, FALLING);
}

void loop() {
  // put your main code here, to run repeatedly:
}

void blink() {
  volatile static int flag = LOW;
  flag = !flag;
  digitalWrite(15, flag);

  if(flag)  ticker.attach(3, blink);
  else      ticker.detach();
}

 タクトスイッチの FallingDown(H→L) をトリガーにし、スイッチが押されたら LED を点灯させ、3秒後に自動消灯する、というスケッチです。
 点灯中にまた押されたら、3秒を待たずに直ちに消灯、ってロジックも加わってますが、チャタリング対策はしていないので、押し方によっては意図したとおりにならない場合もあります。


 ガイガーカウンターに応用するには、blink() の中でカウンターを進めたらいいだけですね。


(追記)2015/10/23
 早速ガイガーカウンターに応用しました。
 割り込みでパルスカウントして、1秒おきに移動平均値を再計算しています。
 詳しくは ESP8266 割り込みパルスカウント (ガイガーカウンターの心臓部) をどうぞ