Простой счетчик включений на Arduino
Я из Аргентины.
Я делаю своего рода проект для своего автомобиля, и одна из многих функций, которые я планирую, — это проверка того, сколько раз Arudino был включен.
Я думал о простом счетчике и сохранении его в EEPROM (внутри setup()).
Мне удалось сохранить значение и прочитать его, но я не могу прибавить +1 к этому значению, сохранённому в EEPROM.
#include <EEPROM.h>
char buffer[15]; // длина переменной, количество символов
int cant;
void setup()
{
Serial.begin(9600);
Serial.println("Write to EEPROM: ");
EEPROM.put(0, "12345678901234");
Serial.print("Read from EEPROM1: ");
Serial.println(EEPROM.get(0, buffer));
Serial.print("Read from EEPROM2: ");
Serial.println(buffer);
Serial.print("Read from EEPROM3: ");
cant=(EEPROM.get(0, buffer));
Serial.println(cant);
}
void loop()
{
}
И я получаю на выходе:
Write to EEPROM:
Read from EEPROM1: 12345678901234
Read from EEPROM2: 12345678901234
Read from EEPROM3: 370
Переменная cant показывает другое значение.
@Diego Nunez, 👍0
Обсуждение1 ответ
Лучший ответ:
Вызов EEPROM.get(0, буфер) корректно считывает данные EEPROM в
предоставленный буфер. Для удобства он возвращает ссылку на него.
Буфер. Это ссылка на массив, поэтому она преобразуется в указатель на
Его первый элемент — указатель типа char *. Строка
cant=(EEPROM.get(0, buffer));
Таким образом, неявно преобразует этот указатель в целое число. Значение, которое вы
get — это адрес памяти массива buffer. Вероятно, это не то, что вы
интересуетесь.
Если вы хотите сохранить счетчик в EEPROM, нет смысла
Сохраняя его как текст. Сохраняйте его как обычное двоичное число. Я предлагаю использовать
тип long (или unsigned long), на случай, если вы заведете машину
более 65 535 раз:
void setup()
{
Serial.begin(9600);
long power_up_count;
// Получить счетчик включений из EEPROM.
EEPROM.get(0, power_up_count);
Serial.print("Old power up count = ");
Serial.println(power_up_count);
// Увеличиваем его.
EEPROM.put(0, power_up_count + 1);
// Проверка: перечитайте.
EEPROM.get(0, power_up_count);
Serial.print("New power up count = ");
Serial.println(power_up_count);
}
Ты гений!!!!!!! Большое спасибо, Эдгар! Итак, если я использую буфер символов[15]; я пишу строку, то есть текст?, @Diego Nunez
@DiegoNunez: Хотя массив char обычно используется для хранения текста, в принципе, в него можно поместить всё, что угодно. Текстом его делает то, что вы в него помещаете. Например, "12345678901234" — это текст., @Edgar Bonet
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Как читать и записывать EEPROM в ESP8266
- Какой реальный срок службы EEPROM?
- Как запомнить значения переменных после перезагрузки платы Arduino Uno R3
- Получить доступ к EEPROM ATtiny с помощью кода Arduino?
- Очистка EEPROM
- Как сохранить переменную с плавающей запятой в EEPROM
- Spiffs против Eeprom на esp8266
используйте внешнее запоминающее устройство ... https://arduinoprosto.ru/q/226/what-is-the-real-lifetime-of-eeprom ... устройство FRAM имеет более длительный срок службы ... https://duckduckgo.com/?q=memory+fram+i2c&ia=web, @jsotola