Использование EEPROM для записи значения счетчика
Я создал программу, которая увеличивает счетчик при каждом нажатии кнопки вверх. Я пытаюсь записать это значение в EEPROM, чтобы при выключении и повторном включении платы на экране отображалось значение перед выключением питания.
Я написал этот код, но значение, похоже, не записывается в EEPROM. Увеличение счетчика работает нормально.
#include <EEPROM.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
int addr = 0;
byte value;
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,0);
}
int a;
void loop() {
uint8_t buttons = lcd.readButtons();
if (buttons) {
lcd.clear();
lcd.setCursor(0,0);
if (buttons & BUTTON_UP) {
a+= 1;
EEPROM.write(addr, a);
value = EEPROM.read(addr);
lcd.print(value);
delay(100);
}
}
}
Спасибо за помощь!
@Jon Goe, 👍3
Обсуждение1 ответ
▲ 1
просто добавьте a = EEPROM.read(addr);
в вашей настройке
вы также можете удалить значение байта
и использовать a
, которое вы записали в память в предыдущей строке
,
@radinParsaei
Смотрите также:
- Что не так с моим EEPROM?
- Как запрограммировать ардуино на чистом C/C++?
- Очистка EEPROM
- RtcDateTime' не называет тип
- как отправить аргумент объектам ESP8266WebServer в функции
- Какие Arduino поддерживают ATOMIC_BLOCK?
- GSM-модуль IOT-GA6 Arduino + ошибка CME 58
- Разница между массивом char и массивом unsigned char
Единственный раз, когда вы читаете EEPROM, это сразу после его записи, что бессмысленно. Вам нужно
EEPROM.read ()
вsetup ()
, если вы хотите, чтобы значение было восстановлено во время загрузки., @Edgar BonetЭто сделало свое дело. Цени это, парень!, @Jon Goe
Кроме того, вам нужно только одно значение для хранения счетчика, а не два. Либо
а
, либо "ценность" - выбирайте сами., @MajenkoEEPROM.read и EEPROM.write считывают и записывают только один байт. Вы можете использовать EEPROM.put и EEPROM.get для чтения и записи (беззнакового) int или (беззнакового) long., @Jot
Я вижу, вы всегда используете адрес 0, поскольку EEPROM имеет ограниченное время записи (например, 10K или около того), возможно, лучше использовать разностные адреса. 10 тысяч нажатий - это много, но, вероятно, не нереально в течение длительного времени., @Michel Keijzers
@MichelKeijzers: EEPROM рассчитан на 100 тыс. циклов записи., @Edgar Bonet
Мой обычный метод EEPROM заключается в установке переменной желаемого значения вместе с переменной метки времени. Сбрасывайте переменную метки времени при каждом нажатии кнопки. Затем, когда с момента последнего нажатия пройдет определенное время, запишите значение в EEPROM. Таким образом, если вы нажмете кнопку 50 раз подряд, вы получите только одну запись в EEPROM. Задержка на пару секунд при записи работает хорошо., @Majenko