Вопрос по переменным

Kruppa
Offline
Зарегистрирован: 18.12.2015

Добрый день!

Подскажите, пожалуйста, как можно записать в память переменные, которые бы сохранялись и при выключении питания. А потом могли считываться при запуске?

Заранее спасибо

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
Kruppa
Offline
Зарегистрирован: 18.12.2015

Правильно ли я понял, если мне надо записать одну переменную (int).

То я пишу

EEPROM.write(0, 5);

А потом её считываю функцией :

EEPROM.read(0)
 
Да?
Kruppa
Offline
Зарегистрирован: 18.12.2015

Или так? Как в примере?
 

EEPROM_int_write(12, 1000);  
 
 
int d = EEPROM_int_read(12);
 
Клапауций 322
Offline
Зарегистрирован: 31.12.2015

Kruppa пишет:

Правильно ли я понял, если мне надо записать одну переменную (int).

То я пишу

EEPROM.write(0, 5);

А потом её считываю функцией :

EEPROM.read(0)
 
Да?

в одну ячейку можно записать одну переменную byte

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Kruppa пишет:

EEPROM_int_write(12, 1000);  
int d = EEPROM_int_read(12);

это функции записи и чтения  переменной типа инт по адресу 12 !!!!!!!!!

Kruppa
Offline
Зарегистрирован: 18.12.2015

Это я уже догадался)))
Но  эти функции я должен в теле программы прописывать или он по умолчанию есть уже?
Спасибо)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

#2 - да , но переменную типа byte со значением 5
#3 - да , но пременную типа int со значением 1000 , которая представляется нескольками байтами ( сам преобразуй )

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Но  эти функции я должен в теле программы прописывать ?
да

или он по умолчанию есть уже?
нет

есть только зап/чт байта

Kruppa
Offline
Зарегистрирован: 18.12.2015

Тогда посмотрите, пожалуйста, что я сделал неправильно?
Вроде должна появляться нужная переменная d, при мониторинге порта. Но экран пуст)

#include <EEPROM.h>

void setup() {
  // put your setup code here, to run once:
EEPROM_int_write(12, 1000); 

}

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

int d = EEPROM_int_read(12);
  Serial.println(d);


delay(20);
}

// чтение

int EEPROM_int_read(int addr) {   

  byte raw[2];

  for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);

  int &num = (int&)raw;

  return num;

}

 

void EEPROM_int_write(int addr, int num) {

  byte raw[2];

  (int&)raw = num;

  for(byte i = 0; i < 2; i++) EEPROM.write(addr+i, raw[i]);

}

 

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а где инициализация сериал ?

Kruppa
Offline
Зарегистрирован: 18.12.2015

Всё получилось!!
Спасибо большое!!!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Kruppa пишет:

Всё получилось!!
Спасибо большое!!!

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

 

Kruppa
Offline
Зарегистрирован: 18.12.2015

Скидываю весь код))) Спасибо еще раз всем)
 

#include <EEPROM.h>

void setup() {
  // put your setup code here, to run once:
EEPROM_int_write(12, 1000); 
  Serial.begin(9600); //устанавливаем последовательное соединение

}

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

int d = EEPROM_int_read(12);
  Serial.println(d);


delay(20);
}








// чтение

int EEPROM_int_read(int addr) {   

  byte raw[2];

  for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);

  int &num = (int&)raw;

  return num;

}

 

void EEPROM_int_write(int addr, int num) {

  byte raw[2];

  (int&)raw = num;

  for(byte i = 0; i < 2; i++) EEPROM.write(addr+i, raw[i]);

}

 

Bald
Offline
Зарегистрирован: 17.03.2016

Пожалуйста... Что в этой строке не так?

const char* station[]PROGMEM={"Радио России","Ю","Радонеж","Business","Сити","Ретро","Юмор","Jazz","Мегаполис","Кекс","Авторадио","Relax","Эхо Москвы","Культура","Москва","Дача","Карнавал","Спорт","Коммерсант","Восток","Весна","RU","Rock","Звезда","Дорожное","Такси","Детское","Комсомольская правда","Вести","Chocolate","Рекорд","Romantica","Орфей","Финам","Серебряный дождь","Best","Classic","DFM","Наше","Monte Carlo","Comedy","Шансон","Маяк","Maximum","Energy","Радио 7","Moscow","Русское радио","Europa Plus","Love","Русская Служба Новостей","Hit FM","Милицейская Волна"};

вот такая ошибка

exit status 1
variable 'station' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

для думок нужно всё что у тибя есть....
т.е. - сейчас весь код