Использование 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