Как мне убедиться, что Arduino запускает эту строку кода только один раз даже после сброса?

#arduino #arduino-c #real-time-clock

#arduino #arduino-c #часы реального времени

Вопрос:

У меня есть модуль часов реального времени, и я пытаюсь сделать из него RGB-часы. Существует определенная строка кода, которая устанавливает время и дату для модуля часов реального времени. Я помещаю это в установочный код, но каждый раз, когда я перезагружаю Arduino, он снова запускает эту строку кода. Есть ли какой-либо способ, которым я могу убедиться, что после запуска этой строки кода она больше никогда не запустится, даже если я сброшу Arduino?

Комментарии:

1. Если вам нужны реальные часы, это решается аппаратно, с помощью внешней RTC-схемы и аккумулятора. Кроме того, большинство современных микроконтроллеров имеют возможность проверить причину сброса. Если у вас есть такая опция, проверьте, был ли сброс вызван сбросом питания или чем-то еще.

2. Спасибо, я не могу поверить, что не подумал об этом раньше!!

Ответ №1:

Это широкий вопрос, который выходит за рамки программирования. Ответ на вашу конкретную проблему — «Удалить эту строку кода» setup , она не будет запущена (я уверен, вы это знаете). Тем не менее, вы должны предоставить некоторый физический ввод (кнопки элементарный интерфейс, похожий на меню), чтобы установить часы при первом использовании. Вторым способом установки времени может быть последовательный порт, к которому вы можете физически подключиться. Для этого требуется некоторый код для чтения этого последовательного порта в вашем loop методе.

В релизной версии вашей прошивки Clock я бы оставил только чтение времени, сохраненного в EEPROM (из модуля RTC или внешнего чипа), а не жестко заданного значения setup .

Комментарии:

1. Аппаратные решения в программировании всегда являются лучшими 🙂

Ответ №2:

На вашем RTC может быть надпись «RTC остановлен», которую вы можете использовать для переключения на «нормальное поведение». Он будет установлен при отключении питания и RTC-батареи. Тогда RTC, вероятно, будет читать «1 января 1970 00:00» и не будет увеличиваться, если не установлено.

Однако ваш демонстрационный код для установки RTC — это просто демонстрационный код, не предназначенный для использования как есть. (Подробнее см. Ответ Виктора)