Вопросы по EEPROM: хранение и чтение

Нет. Размер зависит от типа (ТИПА, Карл) данных. См. таблицу выше

Готовлюсь на старт - встречать буду с внуками в Краснодаре, скоро выезжаю туда ))

Посмотрите я правильно рассчитал этот индекс для записи данных.

int i0= 100;
int ddd0=101;

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#include <EEPROM.h>

int indexI=0;
int N=indexI+sizeof(i0);
 

void Read0() {
EEPROM.get(N*0, i0);
Serial.print("i0:"+String(i0));
}

void Read1() {

EEPROM.get((N*1), ddd0);
Serial.print("ddd0: "+String(ddd0));
}

void Save0() {
EEPROM.put(N*0, String(i0));
Serial.print(i0);
}

void Save1() {

EEPROM.put(N*1, String(ddd0));
Serial.print(String(ddd0));
}


void setup() {
Serial.begin(9600);
 Save0();
 Save1();
 Read0();
 Read1();
 lcd.begin(16,2);
 lcd.setCursor(0,0);
 lcd.print(String(i0)+"/"+String(ddd0));
Serial.print(String(i0)+"/"+String(ddd0)+"    ");
}

void loop() {
  // put your main code here, to run repeatedly:

}

Самое тупое, что можно придумать - вычислять индекс ячейки в процессе выполнения программы :sweat_smile:

Вот так нельзя?

int indexI=0;
int index2=indexI+sizeof(i0);
...................................
EEPROM.get(index2 ddd0);

Можете дать код целебный со всеми исправлениями чтобы там можно было по полной программе.Спасибо.

Нет. Это вам домашнее задание на каникулы. Дерзайте ))

1 лайк

Проще воспользоваться ИИ, он сгенерирует вам код, просто грамотно пишите промпты.

1 лайк

На кон поставлена судьба человечества.
Все получилось спасибо Вам огромное!

#include <EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int base = 0;
int i0 = 100;
int i1 = 101;
int i2 = 102;

void saveInt(int index, int value) {
  int addr = base + index * sizeof(int);
  EEPROM.put(addr, value);
}

int readInt(int index) {
  int val;
  int addr = base + index * sizeof(int);
  EEPROM.get(addr, val);
  return val;
}

void setup() {
  Serial.begin(9600);
  saveInt(0, i0);
  saveInt(1, i1);
  saveInt(2, i2);
  Serial.println(readInt(0));
  Serial.println(readInt(1));
  Serial.println(readInt(2));
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print(String(readInt(0))+"/"+String(readInt(1))+"/"+String(readInt(2)));
}
void loop() {}

А теперь представьте себе, что у вас десяток/другой параметров в EEPROM :sweat_smile:

Если ты работаешь с отдельными переменными в ЕЕПРОМ, лучше пользоваться стандартными функциями из avr libc, типа eeprom_read_word() /_write_word(), через EEMEM макрос. И тогда не нужно ничего высчитывать.

Всем, спасибо!

uint16_t EEMEM em;
uint16_t m = eeprom_read_word(&em);
eeprom_write_word(&em, m);

Учись искать.

Может, лыжи виноваты?

Вот Вам всем нечем заняться !!! Отправьте ТС учиться … и всё …

34 сообщения из блохи …

1 лайк

Ну, как же, тут, панимаешь,

А Вы прям …

1 лайк

1 байт вмещает 256 различных значений.

2 байта - 256*256 различных значений. Сюда попадают значения 0…65536

4 байта это 256 x 256 x 256 x 256 = чуть больше 4 миллиардов.

Если вы не хотите думать и разбираться ПЕРЕД тем, как писать, тогда используйте 4-х байтовые записи в EEPROM для всех чисел

если модератор топик не потрет, мы её еще и подкуем, но в процессе есть шанс пересраться

1 лайк

вот с этим

рановато ковать

4 лайка

0…65535 не надо обманывать.)

1 лайк

2^16?