arduinoでスリープ
スリープ周りは一度調べたがコードを捨ててしまった・・
省エネ化?
タイマーを画面に表示する場合、画面更新時は起きる必要がある
秒カウントする場合は省エネ効果があるのだろうか?
ウォッチドッグタイマーの場合は8sが最長のスリープ時間のようだ
タイマーの設計
- OLEDは常にON
- WDTで1sスリープをしつつカウントアップする
- interruptピンでWDT中に復帰されたらWDTを停止したい
スリープ
-- ひとまずここを転記する
-- こっちもよさそう
-- シンプル
-- タイマーによる復帰
ADCの無効化
> code
byte adcsra_old = ADCSRA; // ADC Control と Register Aの設定値の以前の値を保持。
ADCSRA = 0; // アナログ・デジタル・コンバータ機能の無効にする。
<<
スリープモードの設定
> code
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
<<
割込みの無効化
> code
noInterrupts(); // cli()でも同じ
<<
電圧降下検出機能の無効化
> code
sleep_bod_disable();
<<
スリープ機能を有効化
> code
sleep_enable();
<<
外部割込み条件の設定
> code
attachInterrupt(0,wakeUpNow, LOW); // INT0端子(2番ピン)の立ち下がりで割り込み発生。wakeUpNow関数が呼ばれる。
<<
スリープ実行
> code
sleep_cpu();
<<
スリープ機能無効化
> code
sleep_disable();
<<
外部割込み条件の設定を解除
> code
detachInterrupt(0);
<<
ADCを有効にする
> code
ADCSRA = adcsra_old;
<<
OLEDのスリープ
u8g2のsetPowerSaveで実現できる