Подумайте еще раз - данные занимают по две ячейки, вы пишете первую переменную в первую ячейку, значит она занимает ячейки с индексом 1 и 2. А куда вы пишете вторую переменную? Посмотрите в свой код внимательно, я в вас верю
Так пишет нормально, сейчас догоняю, что дело в поединке слов/снов.
Я не понимаю неужели нельзя сделать индекс 1…N.
Я думал это просто так работает.
Но на деле, оказалось… нужен сдвиг.
#include <LiquidCrystal.h>
#include <EEPROM.h>
int i0 = 100;
int ddd0 = 101;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
// адреса без пересечения
int addr_i0 = 0;
int addr_ddd0 = addr_i0 + sizeof(i0);
// сохранить в EEPROM
EEPROM.put(addr_i0, i0);
EEPROM.put(addr_ddd0, ddd0);
// прочитать обратно (для проверки)
i0 = 0; ddd0 = 0;
EEPROM.get(addr_i0, i0);
EEPROM.get(addr_ddd0, ddd0);
// вывод
Serial.println(String(i0) + "/" + String(ddd0));
lcd.setCursor(0, 0);
lcd.print(String(i0) + "/" + String(ddd0));
}
void loop() {
// пусто
}
А как тогда сделать метод, чтобы рассчитвать этот индекс сдвига для 5 ячеек по 20 байт информации каждая?
четырехзначность - это не для МК, а лично для вас. Вы должны смотреть на тип данных. Конкретно в этом случае вы пишете переменные типа int, которые в 8-битных атмегах занимают 16 бит, т.е. 2 (ДВА) байта. Отсюда и пляшите
Первая переменная (2 байта) - индекс idx0 = 0;
Вторая переменная (4 байта) - индекс idx1 = idx0 +2;
Здесь не ошибка случайно:
Третья переменная (6 байта вместо 2 байта) - индекс idx2 = idx1 + 4;
Как вы это считает я путаю биты с байтами.
Например число: xx=255; //это 1 байт.
Число yy=512; //это 2 байта. Верно? zz=1024//это 3 байта. Выходит!
А число aa=2048;// Это 4 байта?
Или все что я сказал не верно!?