Преобразование стандартной схемы настройки/цикла в приложение с низким энергопотреблением?
Предположим, у меня есть типичный скетч в стиле настройки/цикла, например, такой, который включает светодиод при нажатии кнопки.
Как мне изменить это так, чтобы оно переходило в режим низкого энергопотребления, просыпалось при нажатии кнопки и возвращалось в режим низкого энергопотребления после завершения работы логики?
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
// желательно: введите здесь режим пониженного энергопотребления
}
void loop() {
int buttonState = digitalRead(buttonPin);
// желательно: выход из режима низкого энергопотребления здесь
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}
// желательно: вернуться в режим пониженного энергопотребления здесь
}
@Mark Harrison, 👍5
Обсуждение1 ответ
Лучший ответ:
▲ 6
Этот скетч почти идентичен скетчу powerDownWakeExternalInterrupt.ino, который идет с библиотекой LowPower
. Я использую INPUT_PULLUP
и кнопку NO, чтобы запустить его для пробуждения и включения светодиода.
#include "LowPower.h"
const byte wakeUpPin = 2;
// Просто обработчик прерывания контакта.
void wakeUp(){}
void setup(){
// Настройте вывод пробуждения как вход.
// Это потребляет несколько мкА тока.
pinMode(wakeUpPin, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop(){
// Разрешить выводу пробуждения вызывать прерывание при низком уровне.
attachInterrupt(0, wakeUp, LOW);
// Вход в состояние выключения питания с отключенными модулями АЦП и BOD.
// Просыпаться, когда на выводе пробуждения низкий уровень.
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
// Отключить внешнее прерывание вывода на выводе пробуждения.
detachInterrupt(0);
// Сделайте что-нибудь здесь.
digitalWrite(LED_BUILTIN, HIGH);
delay(2000);
digitalWrite(LED_BUILTIN, LOW);
}
,
@VE7JRO
Смотрите также:
- Как перевести ATtiny/ATmega в режим глубокого сна (чтобы годами работать от батарей), но при этом обнаруживать нажатие кнопки?
- Вывод ESP8266 из deepSleep с помощью кнопки
- Как перевести RFID-модуль MFRC522 в спящий режим?
- Легкий сон ESP8266 — не могу проснуться
- Как отслеживать миллисекунды в спящем режиме
- Очищается ли SRAM при переводе Arduino в режим sleep_mode_pwr_down?
- Пронуться после отключения питания чтобы проверить датчик а затем снова заснуть
- Монитор напряжения батареи сразу после глубокого сна
Для какой платы Arduino?, @Jot
@Jot, я открыт для комментариев по любому из них. Если некоторые из них особенно хороши для маломощных приложений, мне было бы интересно услышать об этом., @Mark Harrison
Некоторые из них. Например, "голый скелет" atmega328p. Смотрите: https://www.gammon.com.au/power Некоторые платы Arduino MKR могут питаться от батареи Lipo. Процессор ARM M0+ плат MKR может переходить в спящий режим, но я не знаю, есть ли библиотека для этого, которая поддерживает все режимы. Я также не знаю, какие платы MKR используют очень мало тока для остальных компонентов платы., @Jot