user31772: Along all the "advanced" methods described in this article, does simple method as downscaling processor while delay makes a difference on power consumption? How much time does the clock alternation takes itself?
Is below example valid?
#include <avr/power.h>

void setup() {}

void loop {

    /* 
       here some jobs to do...
    */

    clock_prescale_set(clock_div_256); // downscale clock
    delay(200); // wait
    clock_prescale_set(clock_div_1); // restore clock
}


user7508: Reducing the CPU frequency should work, but I would expect better
savings by sleeping during the busy loop:
#include <avr/sleep.h>

void sleepy_delay(uint32_t duration)
{
    uint32_t start = millis();
    while (millis() - start < duration) {
        sleep_mode();
    }
}

Note that the sleep will be interrupted at least on every Timer 0
overflow interrupt, which happens every 1024 µs (that's what
increments the value returned by millis()), so there is no risk of
oversleeping. You could add some power_*_disable() calls for better
savings.

31772: <p>Along all the "advanced" methods <a href="http://www.gammon.com.au/power" rel="nofollow noreferrer">described in this article</a>, does simple method as downscaling processor while <code>delay</code> makes a difference on power consumption? How much time does the clock alternation takes itself?</p>

<p>Is below example valid?</p>

<pre><code>#include &lt;avr/power.h&gt;

void setup() {}

void loop {

    /* 
       here some jobs to do...
    */

    clock_prescale_set(clock_div_256); // downscale clock
    delay(200); // wait
    clock_prescale_set(clock_div_1); // restore clock
}
</code></pre>
 7508: <p>Reducing the CPU frequency should work, but I would expect better
savings by sleeping during the busy loop:</p>

<pre class="lang-c++ prettyprint-override"><code>#include &lt;avr/sleep.h&gt;

void sleepy_delay(uint32_t duration)
{
    uint32_t start = millis();
    while (millis() - start &lt; duration) {
        sleep_mode();
    }
}
</code></pre>

<p>Note that the sleep will be interrupted at least on every Timer 0
overflow interrupt, which happens every 1024&nbsp;µs (that's what
increments the value returned by <code>millis()</code>), so there is no risk of
oversleeping. You could add some <code>power_*_disable()</code> calls for better
savings.</p>
