電源投入のタイミングであったり、色々な要因から電源投入直後周辺デバイスやArduinoが上手く動かない事がたまにある。setupでdelayで待ってみてもNGで、リセットボタンを押すと正常に動作し始める。
そんな訳で、電源オン後一回だけリセットをしたい時の技。EEPROMに起動の度1か0を書く事で、電源オン後一回だけリセットをかける。
#include <avr/wdt.h>
#include <EEPROM.h>
//Arduinoをリセットする
void software_reset() {
wdt_disable();
wdt_enable(WDTO_15MS);
while (1) {}
}
byte Load_Bootstate() {
int state;
state = EEPROM.read(0);
return state;
}
void Set_Bootstate(int state) {
EEPROM.write(0, state);
}
void setup() {
Serial.begin(9600);
//電源投入後500ミリ秒後に一回再起動する
if (Load_Bootstate() == 0) { //メモリに0が書いてあるので再起動する
Set_Bootstate(1); //EEPROMに1を書いておく 次は通常起動
delay(500);
Serial.println("Rebooting");
software_reset();
}
Set_Bootstate(0); //メモリに0を書いておく。
Serial.println("Boot!");
}
void loop() {
}
This post is also available in: 英語