雨量計を利用するとき、雨が降っている時だけカウントして、あとはスリープしていたい。
雨量計はシーソーが傾き、真ん中になった時にスイッチが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;
}
}
}

