Как сохранить состояние - заставить ардуино запускать код только один раз/заставить ардуино работать по-другому в следующий раз, когда он включен
Я создаю велосипедный спидометр на основе Arduino. Когда код запускается, пользователь выбирает размер своего велосипеда (который мне нужен для расчета радиуса). Затем у меня есть конечная машина состояния, в которой пользователь нажимает кнопку между скоростью, временем и температурой. Мне нужно поместить эту схему на батарею, и ее нужно установить на велосипед. Но каждый раз, когда вы подключаете и отключаете аккумулятор, код снова запускается с самого начала, чего я не хочу. Таким образом, каждый раз, когда пользователь выключает и снова включает спидометр, ему нужно снова выбрать размер велосипеда. Можно ли сохранить выбранный им размер, чтобы при следующем включении он не попадался.
Итак, у пользователя есть спидометр, он включает его, выбирает размер велосипеда, выключает его, а через некоторое время снова включает, и часть выбора размера велосипеда не появляется, он просто "знает" запоминает, что пользователь выбрал в прошлый раз.
Я не знаю, как это может работать, будет ли Arduino запускать определенный код только один раз или есть функция для «в следующий раз, когда Arduino будет вести себя так, как электричество».
@Marin Filipovic, 👍5
Обсуждение1 ответ
Лучший ответ:
Как сказано в одном из комментариев, вам нужно будет использовать библиотеку EEPROM. Когда вы сохраняете переменную в своем коде (например, int test = 10;
), переменная вместе со своим значением сохраняется в ОЗУ. EEPROM — это часть жесткого диска вашего Arduino, которая запоминает свое значение, когда вы отключаете питание Arduino.
Если вы реализуете кнопку отключения питания, просто сохраняйте состояние (или, в вашем случае, размер колеса) в EEPROM всякий раз, когда пользователь вводит его. При следующем включении питания вы можете проверить, есть ли предыдущее значение в EEPROM, и продолжить с этим значением, если оно существует. В противном случае запросите у пользователя размер колеса.
Возможно, вы также захотите реализовать кнопку сброса, чтобы сбрасывать настройки всякий раз, когда вы меняете велосипед или колеса. Посмотрите пример кода EEPROM, так как их много в Интернете.
Хорошо, спасибо. Я поищу, эта часть "при следующем включении можно проверить, есть ли значение превизуса" - это то, что мне нужно. И да, я реализую кнопку сброса, хорошая идея. Здоровья мужику :), @Marin Filipovic
@MarinFilipovic не забудьте прочитать eeprom, его не будет в переменной, которую вы сохранили ранее, @Ananas_hoi
ааа ок, понял, спасибо, @Marin Filipovic
При загрузке/перезагрузке прочитайте конфиги из EEPROM. Вы можете хранить их в оперативной памяти, за исключением случаев, когда они меняются. Это может помочь сохранить расстояние, калории и все остальное. Не забудьте добавить какой-то магический номер и версию, чтобы, если он свежий и не отформатированный (или вы меняете структуру данных), вы могли отформатировать или преобразовать его. Еще одна возможная вещь, которую вы можете захотеть, - это вариант выравнивания износа, поскольку запись в EEPROM не является бесплатной, и она постепенно изнашивается. Этого достаточно для гарантированных 100 000 циклов и, как правило, намного больше, но если этого будет недостаточно, хорошей идеей будет выравнивание износа., @RDragonrydr
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
использовать библиотеку EEPROM, @Juraj