なぜ私のArduinoメガを寝かせないのですか?

私は「プログラムがオン」という言葉を一度印刷してから寝る次のプログラムを持っています。しかし、スリープ状態にはならず、何度も "プログラムがオン"であることが続きます。

#include 

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println("Program is on");
  sleepNow();
}

void sleepNow()
{
 //Choose our preferred sleep mode:
  set_sleep_mode(SLEEP_MODE_IDLE);
 //Set sleep enable (SE) bit:
  sleep_enable();
 //Put the device to sleep:
  sleep_mode();
 //Upon waking up, sketch continues from this point.
  sleep_disable();
}
1
だから私は上記のコードで私のArduinoを目覚めさせていますか?私は sleepNow()関数のほかに何も持っていません。
追加された 著者 Mike Sutton,
any 割り込みはArduinoライブラリで使用されるものを含め、Idleから起動します。
追加された 著者 Ignacio Vazquez-Abrams,
それを目覚めさせるのは、上記のコードでは見られないものですが、それでも存在します。
追加された 著者 Ignacio Vazquez-Abrams,

1 答え

アイドル状態のスリープ状態では、Ignacio Vazquez-Abramsがコメントしたように、タイマ割り込みによってプロセッサがスリープ状態に入る。

"より高い"スリープモードが動作しますが、シリアル出力バッファが空になる前にプロセッサがスリープ状態になるため、 Serial.flush()を追加する必要があります。

#include 

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  Serial.println("Program is on");
  Serial.flush ();
  sleepNow();
}

void sleepNow()
{
 //Choose our preferred sleep mode:
  set_sleep_mode(SLEEP_MODE_PWR_SAVE);
 //Set sleep enable (SE) bit:
  sleep_enable();
 //Put the device to sleep:
  sleep_mode();
 //Upon waking up, sketch continues from this point.
  sleep_disable();
}

省電力についてのページをご覧ください。

1
追加された
SLEEP_MODE_PWR_SAVE モードを使用しているときに目を覚ますにはどうしたらいいですか?
追加された 著者 Mike Sutton,
@クリスタルプレツカー:いくつかあります。データシートの「スリープモード」セクションの「省電力」行を参照してください。
追加された 著者 Ignacio Vazquez-Abrams,
節電についてのページをご覧ください。ピン変化と外部割り込みは、プロセッサをスリープ状態から復帰させます。シリアルインタラプトもそうだと思います。ウォッチドッグタイマ割り込みも使用できます。
追加された 著者 Nick Gammon,