//ウォッチドッグタイマ(WDT)を制御するためのAVRライブラリ
#include <avr/wdt.h>
#define btnInputPin 2
void setup() {
Serial.begin(9600);
//MCUSR(マイクロコントローラステータスレジスタ)は、前回のリセットがどの原因で発生したかを示す
//WDRFは、ウォッチドッグリセットフラグで、値が1であれば前回のリセットがWDTによるものだと分かる
//ただし、Arduino IDE環境だとリセット時にMCUSRがクリアされてしまうようで、使えません…
if (bitRead(MCUSR, WDRF)) {
Serial.println("リセットしたワン!");
Serial.println();
}
Serial.println("時間内にボタンを押さないとリセットするワン!");
//WDTを有効化しタイムアウト時間を4秒に設定、3秒にしたければ「WDTO_3S」
wdt_enable(WDTO_4S);
//PULLUPなので何もしていないとHIGH、ボタン押下でLOW
pinMode(btnInputPin, INPUT_PULLUP);
}
void loop() {
while (digitalRead(btnInputPin) == HIGH){
//今回はなにも処理しない
}
//millis()は起動してからのミリ秒を返す関数
Serial.print(millis()/1000); //ミリ秒を1000で割って秒に変換している
Serial.println("秒経過してるワン♪");
//WDTをリセットし、タイムアウトまでの時間を4秒に戻す
wdt_reset();
delay(100);
}