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