/* DelaySleep関数のテスト 2014/07/06 ラジオペンチ http://radiopench.blog96.fc2.com/ */ #include int led = 13; // LEDピン boolean flag = false; // LED on/off フラグ void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, flag); // flagで LEDを点滅 delaySleep(500); // delaySleep関数呼び出し flag = ! flag; // flagを反転 } void delaySleep(unsigned long t) { // // 注意:millis関数を使っているので50日以上の連続動作は出来ない。 // unsigned long t0; if( t <= 16 ) { // 16ms以下なら普通のdelayで処理 delay(t); } else{ // 17ms以上ならスリープ入れたdelayで実行 t0 = millis(); // 開始時のmillisの値を記録しておき set_sleep_mode (SLEEP_MODE_IDLE); // アイドルのモード指定 while( millis() - t0 < t ) { // 設定値になるまでループ sleep_mode(); // スリープに入れる(自動復帰するので何度も指定) } } }