• Система автоматизации с открытым исходным кодом на базе 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;
 
Сверху Снизу