Program Resource

開発者向け各種コード、アルゴリズム、リソース情報ライブラリ もしくはねふぁの覚え書き

電源投入のタイミングであったり、色々な要因から電源投入直後周辺デバイスや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: 英語

コメントを残す

メールアドレスが公開されることはありません。


*

CAPTCHA