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 割り込みパルスカウント (ガイガーカウンターの心臓部) をどうぞ