Сохранить значение в EEPROM для выполнения различных действий при сбросе?
Я хочу, чтобы одна и та же кнопка просыпалась (сбрасывалась) и переводила ее в спящий режим, но это сложно, если кнопка привязана непосредственно к первому контакту. Моя мысль заключалась в том, чтобы прочитать и сохранить значение в EEPROM, чтобы сообщить чипу, в каком режиме мы находимся, чтобы он мог выполнить встречное действие. Например, при RST, если значение равно 0, чип должен проснуться и что-то сделать. Затем он установит значение на 1. Если кнопка будет нажата еще раз, чип перезагрузится, считывает цифру 1 и теперь просто переводит чип в глубокий сон после установки значения обратно на 0. Промойте, повторите.
Имеет ли это смысл? Будет ли это работать? Есть ли лучший/более простой способ?
@Ryan Detzel, 👍1
Обсуждение2 ответа
Хотя идея выглядит интересной, IHMO, вы должны иметь в виду:
Включите код для логики отказа от кнопок. На самом деле вы получите пару «перезагрузок» в течение ~20 мс во время нажатия кнопки. Без осуждения вы можете получить сигнал сброса прямо в момент записи в EPROM. Хотя EPROM в настоящее время довольно «надежны», многие из них не являются хорошей практикой. ИМХО, одно из потенциальных решений — задержать обновление EPROM с переключением состояния на 20 мс после загрузки, чтобы оно выполнялось в стабильном состоянии.
Вы также можете рассмотреть возможность включения электронной схемы, которая будет удерживать сброс достаточно долго для перезагрузки контроллера (это также может уменьшить дребезг).
Срок службы EPROM ограничен с точки зрения циклов перезаписи. Если ваше устройство включает и выключает примерно 100 таймеров в день, оно может выйти из строя примерно через год.
Запись EPROM обычно потребляет значительное количество энергии, поэтому может сократить срок службы батареи (если вы используете батарею).
Наверное, более разумным выглядит классический подход с режимом сна/пробуждения по кнопке, если только у вас не хватает пинов ;)
Совершенно согласен с Сержем.
Чтобы осветить вопросы №3 и №4 ответа Сержа, я рекомендую вам взглянуть на FRAM.
Он более долговечен: 10 триллионов циклов записи.
- ESP32 не может спать дольше 35 минут.
- Сброс глубокого сна с датчиком удара
- Arduino Mega сохраняет состояния после перепрограммирования
- Использование внешнего сброса для запуска приема радиосигнала
- ESP8266 требует двух перезагрузок, чтобы проснуться от глубокого сна
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Как читать и записывать EEPROM в ESP8266
- Сброс Arduino Uno в коде
Для меня это имеет смысл., @CrossRoads
ответы на три вопроса....
да
,да
,невозможно ответить без определения "лучше" и "проще"
, @jsotola