• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение EEPROM

dzhem81

New member
Работа eeprom на nodemcu
Подскажите где я накосячил.
Р и t =0.1
Естественно eeprom нормально не работает.Подскажите мне и может кому то пригодится.Спасибо.

lcd.print("TERMOSTAT SETUP");


float t_minim = EEPROM.get(1, t_minim);

lcd.setCursor(0,1);

lcd.print("min");

lcd.print(t_minim, 1);


float t_maxim = EEPROM.get(2, t_maxim);

lcd.setCursor(9,1);

lcd.print("max");

lcd.print(t_maxim, 1);



digitalWrite(ledPin, HIGH);


if (centreBtn) {

digitalWrite(ledPin, LOW);

delay(del);// включаем светодиод

lcd.clear(); //очищаем экран

digitalWrite(ledPin, HIGH);

break; }


if (leftbtn) {

digitalWrite(ledPin, LOW);

lcd.clear();

t_minimi();

delay(del);

lcd.clear(); //очищаем экран

x =0;

digitalWrite(ledPin, HIGH);

}



if (rightbtn) {

digitalWrite(ledPin, LOW);

lcd.clear();

t_maximi();

delay(del);// включаем светодиод

lcd.clear(); //очищаем экран

x =0;

digitalWrite(ledPin, HIGH);

}


}}



//////------------------------------------------------------------------------—

//SUB MENU
void t_minimi()

{


lcd.clear(); //очищаем экран

delay(del);

while(1){ //бесконечный цикл

button_read();



lcd.setCursor(0,0);

lcd.print("TEMP MINIM SETUP");

float t_mini = EEPROM.get(1, t_mini);

lcd.setCursor(0,1);

lcd.print("- +");
lcd.setCursor(6,1);
lcd.print(t_mini, 1);
lcd.print((char)223);
digitalWrite(ledPin, HIGH);

if (centreBtn) {

digitalWrite(ledPin, LOW);

delay(del);// включаем светодиод

lcd.clear(); //очищаем экран

digitalWrite(ledPin, HIGH);

break;



}



if (rightbtn) {

delay(del1);

digitalWrite(ledPin, LOW);
lcd.clear();

t_mini+= p;

EEPROM.put(1, t_mini);

digitalWrite(ledPin, HIGH);

}


if (leftbtn) {

delay(del1);

digitalWrite(ledPin, LOW);

lcd.clear();

t_mini-= p;
EEPROM.put (1, t_mini);

digitalWrite(ledPin, HIGH);

}



}

}

void t_maximi()

{

lcd.clear(); //очищаем экран

delay(del);

while(1){ //бесконечный цикл

button_read();

lcd.setCursor(0,0);

lcd.print("TEMP MAXIM SETUP");

float t_maxi = EEPROM.get(2, t_maxi) ;

lcd.setCursor(0,1);

lcd.print("- +");
lcd.setCursor(6,1);
lcd.print(t_maxi, 1);
lcd.print((char)223);
digitalWrite(ledPin, HIGH);

if (centreBtn) {

digitalWrite(ledPin, LOW);

delay(del);// включаем светодиод

lcd.clear(); //очищаем экран

digitalWrite(ledPin, HIGH);

break;



}



if (rightbtn) {

delay(del1);

digitalWrite(ledPin, LOW);
lcd.clear();
{
t_maxi+= p;

EEPROM.put(2, t_maxi);
}
digitalWrite(ledPin, HIGH);

}


if (leftbtn) {

delay(del1);

digitalWrite(ledPin, LOW);

lcd.clear();
{
t_maxi-= p;

EEPROM.put(2,t_maxi);
}

digitalWrite(ledPin, HIGH);

}



}

}
 

Юрий Ботов

Moderator
Команда форума
Видимо проблема в использовании ардуиновских функций для борьбы с EEPROM вместо ESPшных. Поскольку EEPROM в ESP "виртуальный" то и интерфейс к нему несколько отличается: Libraries · ESP8266 Arduino Core
 

dzhem81

New member
Видимо проблема в использовании ардуиновских функций для борьбы с EEPROM вместо ESPшных. Поскольку EEPROM в ESP "виртуальный" то и интерфейс к нему несколько отличается: Libraries · ESP8266 Arduino Core
Читал я это,но как мне исправить.Побитово записать и побитово прочесть
 

Юрий Ботов

Moderator
Команда форума
Читать и писать блоками, допустим по 4 байта. Начать с .begin(4), закончить .end() читать илиписать между ними.
 

dzhem81

New member
Читать и писать блоками, допустим по 4 байта. Начать с .begin(4), закончить .end() читать илиписать между ними.
Спасибо.я понял ошубку.Перед чтением и записью нужно указывать Количество памяти.Сейчас норм.с дробными работает.
 
Сверху Снизу