С помощью библиотеки VEduino микроконтроллер ATmega328p можно перевести в один из шести режимов энергосбережения следующей тройкой команд:
#include <ve_avr.h>DEV_SLEEP.setMode(SleepControl::PWR_DOWN); // Выбор режима снаDEV_SLEEP.enableSleep(); // Разрешить переход в спящий режимsleep(); // Переход в режим снаЕсли прерывания включены (функция interrupts()), то микроконтроллер выйдет из режима энергосбережения по прерыванию:
Если прерывания запрещены (функция noInterrupts()), то "пробудить" микроконтроллер можно только нажатием кнопки сброса (низкий уровень на входе nRESET).
По умолчанию функция sleep() переводит микроконтроллер в режим IDLE.
Пример скетча можно найти в заметке Пробуждение Arduino из спящего режима по нажатию кнопки.