Here is delay
-like function for Low-Power Arduino library. All delay measurments are performed with ATMega328pu (8MHz internal, 3.3V).
powerDownDelay(60000)
= 60002.256mspowerDownDelay(30000)
= 30001.9615mspowerDownDelay(15000)
= 15001.783mspowerDownDelay(10000)
= 10000.08mspowerDownDelay(5000)
= 5000.3095mspowerDownDelay(2000)
= 2007.191mspowerDownDelay(1000)
= 1003.891mspowerDownDelay(500)
= 502.1795ms
Note: All checked with a logic analyzer.
void powerDownDelay(unsigned long delay) {
period_t period;
while(delay > 0) {
if (delay > 8287) {
period = SLEEP_8S;
delay -= 8287;
} else if (delay > 4144) {
period = SLEEP_4S;
delay -= 4144;
} else if (delay > 2072) {
period = SLEEP_2S;
delay -= 2072;
} else if (delay > 1036) {
period = SLEEP_1S;
delay -= 1036;
} else if (delay > 518) {
period = SLEEP_500MS;
delay -= 518;
} else if (delay > 259) {
period = SLEEP_250MS;
delay -= 259;
} else if (delay > 129) {
period = SLEEP_120MS;
delay -= 129;
} else if (delay > 64) {
period = SLEEP_60MS;
delay -= 64;
} else if (delay > 32) {
period = SLEEP_30MS;
delay -= 32;
} else {
period = SLEEP_15MS;
delay -= 16;
}
LowPower.powerDown(period, ADC_OFF, BOD_OFF);
}
}