EEPROM: неверный регистр чисел

Новичок работы с EEPROM`ом и не могу разобраться в данной ситуации, на других форумах ничего похожего нету.

Мне нужно, чтобы все переменные с частицой “n” были в типе int, но регистр ИПРОМа как то неправильно регистрирует их, удивительно, что все числа в отладке кратны 2-м. Помогите : -)

#include <EEPROM.h>

int n1 = 360,n2 = -320,n3 = 280,n4 = -240,n5 = 200,n6 = -160;
void setup() {
   Serial.begin(9600);
   EEPROM.write(1, n1);
   EEPROM.write(2, n2);
   EEPROM.write(3, n3);
   EEPROM.write(4, n4);
   EEPROM.write(5, n5);
   EEPROM.write(6, n6);
}

void loop() {
   Serial.print("К1 - ");
   Serial.println(EEPROM.read(1));

   Serial.print("К2 - ");
   Serial.println(EEPROM.read(2));

   Serial.print("K3 - ");
   Serial.println(EEPROM.read(3));

   Serial.print("K4 - ");
   Serial.println(EEPROM.read(4));

   Serial.print("K5 - ");
   Serial.println(EEPROM.read(5));

   Serial.print("K6 - ");
   Serial.println(EEPROM.read(6));

   delay(1000);
}

и что выводит, например

Screenshot_94

ну так, ничо что

И… тоесть нельзя больше 255 запихнуть туда?

А можно ли как то обойти эту “блокировку”? Мне очень надо.

можно, писать два байта числа размерностью int.

Я слишком чайник для этого, можно поподробнее - как?)

#include <EEPROM.h>

int n1 = 360;

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

  EEPROM.write(1, n1 & 0xFF);
  EEPROM.write(2, n1 >> 8);

  Serial.print("К1 - ");
  Serial.println(EEPROM.read(1) | EEPROM.read(2)<<8);
}

void loop() {

}

на этом моя доброта заканчивается, читайте книжки!

2 лайка

Спасибо Вам, но я уже нашёл выход из данной ситуации с помощью арифметических действий. Вопрос закрыт

ну просвети, может мы будем советовать твое решение всем страждущим.

Глупое решение, но рабочее: Чтобы получить предел 255, нам надо n1 делить на 2, чтобы получить 180, а n2 на -2, чтобы получить 160, и так далее, внедрив такую систему в свой основной код - он рабочий, на больших проектах возможно не получится

не обижайся, но ты раздолбай!
или учись, или иди в монастырь девок гонять.
если с такими идеями, ты, или такие как ты, будешь дальше двигаться по карьерной лестнице, у нас не то что ракеты перестанут летать…

Как всё запущено… Не хватило ума даже страничку с описанием библиотеки EEPROM до конца долистать? https://docs.arduino.cc/learn/built-in-libraries/eeprom/

и чё глупого? мапить значит можно, а делить на два нельзя, ну клоуны, только ТС знает допустима ли такая обработка его данных или нет,
а понял…“мне досталась скромная миссия Господа Бога”…

PS понятно почему не мы на Луну слетали, не научились наши программисты работать с данными им места в памяти не хватило )))
PPS Петровича на вас нету…или он сильно лояльный )))

EEPROM.put(address, data);
EEPROM.get(address, data);
1 лайк

@kalapanga @BOOM
ТСу не помогут put и get - у него и адресация хромает на обе ноги … он по ходу и не подозревает об истиной причине произошедшего…

2 лайка

Простите, не хочу раскрывать свой реальный возраст, но скажу, что мне меньше 18, я начал изучать впринципе C+ год назад, поэтому не могу придумать ничего лучше. Но у меня работает и мне достаточно.

И то, изучал по немногу, в этом году начал прям больше впитывать советов от других программистов.