• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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() читать илиписать между ними.
Спасибо.я понял ошубку.Перед чтением и записью нужно указывать Количество памяти.Сейчас норм.с дробными работает.
 
Сверху Снизу