雨量計を利用するとき、雨が降っている時だけカウントして、あとはスリープしていたい。
雨量計はシーソーが傾き、真ん中になった時にスイッチがONされる。
その地点を越えればまたOFFされるという仕様。
スイッチをpull-upしておき外部割り込みのPIN2に繋ぎその立ち上がり時の
割り込みをハンドルする。
また、スイッチであるためチャタリング除去のプログラムが必要。
省電力のためスリープを優先し今回の実装とします。
#define BOUNCE 200 int pin = 13; int start_time; volatile int state = LOW; WatchdogClass WD = WatchdogClass(); void setup() { Serial.begin(9600); Serial.println("START"); pinMode(pin, OUTPUT); attachInterrupt(0, blink, RISING); WD.systemResetEnable(false); WD.enable(WatchdogClass::TimeOut4s); } void loop() { digitalWrite(pin, state); delay(100); WatchdogClass::timerReset(); //power save mode. arduino can wakeup from timer2 intr. SleepClass::powerSave(); } int cnt = 0; void blink() { // start count if(start_time == 0){ start_time = millis(); }else{ if( (millis() - start_time) > BOUNCE ){ start_time = 0; Serial.println(cnt); cnt++; state = !state; } } }