• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

запись строки в EEPROM

mishgan

Member
Нужно сохранить строки в EEPROM
Написал 2 функции

Код:
void write_string_EEPROM (int Addr,char *Str) {
int length=String(Str).length()+1;
EEPROM.write(Addr,length);
delay(50);

for (int j=1; j <=length ; j++) {
byte hi = highByte(Str[j-1]);
byte low = lowByte(Str[j-1]);
EEPROM.write(Addr+j,hi);
delay (50);
EEPROM.write(Addr+j+64,low);
delay (50);
}
EEPROM.commit();
}

char *read_string_EEPROM (int Addr) {
int length= EEPROM.read(Addr);
char buf[length+1];
for (int j=1; j <=length ; j++) {
buf[j-1] = word(EEPROM.read(Addr+j),EEPROM.read(Addr+j+64));;
}
buff[length+1] = '\0';
return buf;
}
write_string_EEPROM (20,"string");
Serial1.println (read_string_EEPROM (20));
Но почему то они не работают. В сериал порт вываливается какой то мусор. Что я делаю не так?
 

Сергей_Ф

Moderator
Команда форума
Что я делаю не так?
Наверное, документацию невнимательно читаете.
http://esp8266.ru/arduino-ide-esp8266/#eeprom
[fleft]Необходимо вызвать функцию EEPROM.begin(size) каждый раз перед началом чтения или записи, размер (указывается в байтах) соответствует размеру данных, которые вы намереваетесь использовать в EEPROM.[/fleft]
 

mishgan

Member
вот спасибо подсказали. Сделал так.
Код:
void write_string_EEPROM (int Addr, String Str) {
    byte lng=Str.length();
    EEPROM.begin (64);
    if (lng>15 )  lng=0;
    EEPROM.write(Addr , lng); 
    unsigned char* buf = new unsigned char[15];
    Str.getBytes(buf, lng + 1);
    Addr++;
    for(byte i = 0; i < lng; i++) {EEPROM.write(Addr+i, buf[i]); delay(10);}
    EEPROM.end();
}

char *read_string_EEPROM (int Addr) {
    EEPROM.begin(64);
    byte lng = EEPROM.read(Addr);
    char* buf = new char[15];
    Addr++;
    for(byte i = 0; i < lng; i++) buf[i] = char(EEPROM.read(i+Addr));
    buf[lng] = '\x0';
    return buf;
}
 

RusikOk

New member
скажите пожалуйста для чего нужна эта строчка
Код:
if (lng>15 )  lng=0;
 
Сверху Снизу