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

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です