Как можно постоянно сохранять float 'ave' в EEPROM?

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

void setup() {
  Serial.begin(9600);
}

void loop() {
  static unsigned long count = 0;
  static float sum = 0;
  float ave = 0;
  int volt = analogRead(A1);
  float voltage = map(volt, 0, 1023, 0, 2500) / 100.0;
  Serial.print("Voltage: ");
  Serial.println(voltage, 2);
  sum = sum + voltage;
  count++;
  ave = sum / count;
  Serial.print("Average: ");
  Serial.println(ave, 2);
  Serial.println("-----");
  delay(3000);
}

, 👍0

Обсуждение

Добавьте FRAM в вашу систему. Они могут поддерживать 10 триллионов операций записи. 34 миллиарда лет записи. Кроме того, к ним можно получить доступ со скоростью SRAM, в то время как встроенная EEPROM занимает 3,3 мс для записи в нее и может быть повреждена, если во время записи отключается питание. С FRAM вы можете переключаться между двумя адресами, если один из них потеряется, вы можете вернуться к хорошему и отстать всего на несколько секунд. (вы можете сделать это и с EEPROM), @CrossRoads


2 ответа


1

Возможно, но не рекомендуется.

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

,

Насколько это ограничено? Может быть, я могу настроить секунды, когда я буду сохранять данные в день?, @Rica Jacutina

100 000 IIRC, но мне нужно проверить таблицу данных. Лучше использовать что-то вроде 47L16 EERAM., @Majenko


1

Ответ: прочтите справочник по Arduino и найдите EEPROM.put

.

Но на самом деле ваша проблема заключается в том, что

1) если вы записываете в eeprom каждые 3 секунды, Arduino в конце концов не переживу тебя

2) в конечном итоге вы захотите записать сумму и количество в ваше дело?

Вы также должны подумать о том, как выполнить инициализацию из EEPROM после перезапуска.

Возможно, достаточно сохранять значения перезапуска только один раз через 1 минуту/1 час/ежедневно, если они все еще меняются?

Кстати, функция "Обновлять, только если она изменилась" уже встроена в метод put().

,

Что, если я просто сохраню свои последние данные? Каждые полученные данные будут заменяться новыми каждые 3 секунды. Пока я могу сохранить или сохранить свои последние данные, все будет в порядке., @Rica Jacutina

Возможно, вы захотите подумать, есть ли шанс обнаружить отключение питания до того, как Arduino действительно перестанет работать. Если обнаружено, что ваши значения сохраняются, достаточно нескольких миллисекунд. Это можно сделать с помощью некоторого оборудования, но зависит от вашей среды., @the busybee

@Rica Jacutina: Это была и моя основная идея. Если вы всегда сохраняете последние данные каждые 3 секунды, вы будете сохранять их 28800 раз в день. Atmega EEPROM имеет срок службы около 100 000 записей, поэтому ваша система выживает 4 дня. Не очень умный для "среднестатистического человека". Вы можете записать их в разные места и использовать всю память EEPROM и, таким образом, продлить срок службы примерно до года, но идея Busybee намного лучше., @DataFiddler

Я попробую ваши предложения. Большое спасибо!, @Rica Jacutina