Спящий режим Arduino

С помощью библиотеки VEduino микроконтроллер ATmega328p можно перевести в один из шести режимов энергосбережения следующей тройкой команд:

#include <ve_avr.h>

DEV_SLEEP.setMode(SleepControl::PWR_DOWN);  // Выбор режима сна
DEV_SLEEP.enableSleep();                    // Разрешить переход в спящий режим
sleep();                                    // Переход в режим сна

Если прерывания включены (функция interrupts()), то микроконтроллер выйдет из режима энергосбережения по прерыванию:

Прерывания спящего режима Arduino

Если прерывания запрещены (функция noInterrupts()), то "пробудить" микроконтроллер можно только нажатием кнопки сброса (низкий уровень на входе nRESET).

По умолчанию функция sleep() переводит микроконтроллер в режим IDLE.

Пример скетча можно найти в заметке Пробуждение Arduino из спящего режима по нажатию кнопки.