Нажмите и удерживайте переключатель включения/выключения Arduino.
Многие электронные устройства включаются/выключаются или, точнее, включаются/переходят в режим сна, если нажать кнопку и удерживать ее в течение двух или трех секунд. Я хотел бы реализовать эту возможность в проекте с использованием платы Adafruit Feather. Со спящим режимом все просто: я могу определить уровень и, если он останется там какое-то время, запустить код, чтобы перевести процессор в спящий режим. Мой вопрос касается стороны пробуждения. Чип просыпается через прерывание.
Тогда возникает вопрос: как сгенерировать источник прерывания только после того, как кнопка будет удерживаться в течение назначенного времени? Я рассмотрел два варианта:
1) Используйте прерывание уровня и RC-цепь для задержки. 2) Немедленно заставить процессор проснуться, а затем реализовать логику, чтобы определить, удерживался ли он «достаточно долго», и, если нет, снова перейти в спящий режим.
Я упускаю простой вариант? Существует ли общее мнение о том, как лучше всего это сделать? Это кажется настолько нормальной вещью, что я удивлен, что мои поиски не выявили никаких руководств.
@PhotoKevin, 👍2
Обсуждение1 ответ
Я бы выбрал вариант 2.
Вы можете немедленно разбудить контроллер, но только процессор.
Затем просто начните ждать определенное вами «достаточно долгое» время, регулярно проверяя состояние кнопки. Если кнопка все еще нажата, инициируйте полное пробуждение. Если он отпущен, снова засните.
Это простой вариант, не требующий дополнительного оборудования и всего лишь дюжины строк кода.
Другой вариант, который существует и имеет несколько похожее поведение, заключается в том, чтобы ваш процессор регулярно просыпался по таймеру и проверял состояние входа. Так сделано, например, для "радиоуправляемых" устройств (Где "кнопка" - это радиосхема, которую нужно включать и выключать). При достаточно длительном сне между проверками в среднем вы получите «достаточно длительную» задержку.
Эта опция полезна, когда у вас нет доступных контактов прерывания или вам нужно что-то более сложное, чем кнопка, в качестве входных данных.
Пробуждение значительно увеличит энергопотребление. Частота пробуждения должна быть, наверное, в 3 раза больше времени нажатия кнопки, чтобы быть полезной для человека., @PhotoKevin
Это действительно был бы не лучший вариант, но я хотел включить его для полноты картины. Как я уже сказал, если возможно, выберите другой., @Kevin FONTAINE
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Как перевести ATtiny/ATmega в режим глубокого сна (чтобы годами работать от батарей), но при этом обнаруживать нажатие кнопки?
- ESP8266 глубокий сон и MQTT
- ESP.deepSleep() — снова и снова?
- Пользовательская функция сна для Nextion
- Вывод ESP8266 из deepSleep с помощью кнопки
- PIR движение выводит ESP8266 из глубокого сна
- Память ESP8266 RTC (для загрузки)
Неужели нельзя просто подождать, пока кнопка отпустится, а потом идти спать? Вы даже можете отключить прерывание во время бодрствования, а включать его только перед сном., @Gerben
Проблема в том, что случайные удары рассматриваются как запросы на переход в режим сна/пробуждения. Очень желательно нажать и удерживать «достаточно долго»., @PhotoKevin
О, вам также нужно нажать и удерживать для пробуждения. В этом случае выведите MCU из спящего режима с помощью кнопки; дождитесь, пока кнопка будет отпущена; если это меньше 3 секунд, снова засните., @Gerben