Как сохранить состояние - заставить ардуино запускать код только один раз/заставить ардуино работать по-другому в следующий раз, когда он включен

Я создаю велосипедный спидометр на основе Arduino. Когда код запускается, пользователь выбирает размер своего велосипеда (который мне нужен для расчета радиуса). Затем у меня есть конечная машина состояния, в которой пользователь нажимает кнопку между скоростью, временем и температурой. Мне нужно поместить эту схему на батарею, и ее нужно установить на велосипед. Но каждый раз, когда вы подключаете и отключаете аккумулятор, код снова запускается с самого начала, чего я не хочу. Таким образом, каждый раз, когда пользователь выключает и снова включает спидометр, ему нужно снова выбрать размер велосипеда. Можно ли сохранить выбранный им размер, чтобы при следующем включении он не попадался.

Итак, у пользователя есть спидометр, он включает его, выбирает размер велосипеда, выключает его, а через некоторое время снова включает, и часть выбора размера велосипеда не появляется, он просто "знает" запоминает, что пользователь выбрал в прошлый раз.

Я не знаю, как это может работать, будет ли Arduino запускать определенный код только один раз или есть функция для «в следующий раз, когда Arduino будет вести себя так, как электричество».

, 👍5

Обсуждение

использовать библиотеку EEPROM, @Juraj


1 ответ


Лучший ответ:

6

Как сказано в одном из комментариев, вам нужно будет использовать библиотеку EEPROM. Когда вы сохраняете переменную в своем коде (например, int test = 10;), переменная вместе со своим значением сохраняется в ОЗУ. EEPROM — это часть жесткого диска вашего Arduino, которая запоминает свое значение, когда вы отключаете питание Arduino.

Если вы реализуете кнопку отключения питания, просто сохраняйте состояние (или, в вашем случае, размер колеса) в EEPROM всякий раз, когда пользователь вводит его. При следующем включении питания вы можете проверить, есть ли предыдущее значение в EEPROM, и продолжить с этим значением, если оно существует. В противном случае запросите у пользователя размер колеса.

Возможно, вы также захотите реализовать кнопку сброса, чтобы сбрасывать настройки всякий раз, когда вы меняете велосипед или колеса. Посмотрите пример кода EEPROM, так как их много в Интернете.

,

Хорошо, спасибо. Я поищу, эта часть "при следующем включении можно проверить, есть ли значение превизуса" - это то, что мне нужно. И да, я реализую кнопку сброса, хорошая идея. Здоровья мужику :), @Marin Filipovic

@MarinFilipovic не забудьте прочитать eeprom, его не будет в переменной, которую вы сохранили ранее, @Ananas_hoi

ааа ок, понял, спасибо, @Marin Filipovic

При загрузке/перезагрузке прочитайте конфиги из EEPROM. Вы можете хранить их в оперативной памяти, за исключением случаев, когда они меняются. Это может помочь сохранить расстояние, калории и все остальное. Не забудьте добавить какой-то магический номер и версию, чтобы, если он свежий и не отформатированный (или вы меняете структуру данных), вы могли отформатировать или преобразовать его. Еще одна возможная вещь, которую вы можете захотеть, - это вариант выравнивания износа, поскольку запись в EEPROM не является бесплатной, и она постепенно изнашивается. Этого достаточно для гарантированных 100 000 циклов и, как правило, намного больше, но если этого будет недостаточно, хорошей идеей будет выравнивание износа., @RDragonrydr