/*подключаем библиотеки*/
 #include <Wire.h>//подключаем экран
 #include <LiquidCrystal_I2C.h>//подключаем экран
 #include <OneWire.h>//подключаем датчик температуры
 #include <DallasTemperature.h>//подключаем датчик температуры
 #include <EEPROM.h>//подключаем память для записи настроек

 LiquidCrystal_I2C lcd(0x27, 16, 2);//подключаем экран
 OneWire ds_1(2), ds_2(3), ds_3(4);//подключаем шину для температурника
 DallasTemperature ds1(&ds_1), ds2(&ds_2), ds3(&ds_3);//задаем имя датчика комнаты
 DeviceAddress addr1, addr2, addr3;//хранение адреса датчика температуры для проверки


/*ввод переменных*/
 int TUS;//ввод переменной для хранения установленной температуры
 const int up = 7;//ввод переменных для кнопок
 const int down = 9;//ввод переменных для кнопок
 const int left = 6;//ввод переменных для кнопок
 const int right = 8;//ввод переменных для кнопок
 const int reln = 13;//переменная для реле насоса
 const int zad = 10000;//переменная для настройки времени задержки
 int curs;//переменная для меню (курсор)
 int rel1, rel2, rel3;//переменные для реле
 unsigned long nar1, nar2, nar3, narn;//переменные для хранения времени работы (10, 20, 30, 40)
 unsigned long timer;//переменная времени сработки кнопок
 unsigned long timeDS;//переменная для задержки опросов датчиков температуры
 unsigned long timeDR;//переменная для задержки опросов состояния реле
 unsigned long zads;//переменная для задержки обновления экрана
 unsigned long zadp1, zadp2, zadp3, zadpn;//переменная для настройки времени задержки записи наработки
 bool flag = false;//вводим переменную для проверки нажатия кнопок
 bool light = 0;//переменная для управления подсветкой
 bool flag1 = 0, flag2 = 0, flag3 = 0, flagn = 0;//флаг для счетчика времени наработки
 bool kn1, kn2, kn3, kn4;//переменные для кнопок
 char ten1, ten2, ten3, nas;//переменные для хранения состояния тэн и насоса
 long randN;//рандом реле
 //проверка на первый запуск
 #define INIT_ADDR 1023  // номер резервной ячейки
 #define INIT_KEY 50     // ключ первого запуска. 0-254, на выбор

 



void setup(){
  //проверка на первый запуск
    if (EEPROM.read(INIT_ADDR) != INIT_KEY) { // первый запуск
     EEPROM.write(INIT_ADDR, INIT_KEY);    // записали ключ
     lcd.init();
     lcd.print("pervi zapusk");
     delay(2000);
     EEPROM.put(0, 20);//если это первый запуск то задаем настройки
     EEPROM.put(2, 'a');
     EEPROM.put(4, 'a');
     EEPROM.put(6, 'a');
     EEPROM.put(8, 'a');
    }
  


  ds1.begin();//запуск датчика температуры
  ds2.begin();//запуск датчика температуры
  ds3.begin();//запуск датчика температуры
  lcd.init();//подключаем экран
  lcd.backlight();//включаем подсветку
    
  
  /*рандомируем реле*/
  randomSeed(analogRead(A3));
  randN = random(10, 13);
  rel1 = randN;
  do {randN = random(10, 13); rel2 = randN;} while (rel2 == rel1);
  do {randN = random(10, 13); rel3 = randN;} while (rel3 == rel2 || rel3 == rel1);
  /*рандом*/

/*назначаем пины*/  
  pinMode(6, INPUT_PULLUP);//подключаем кнопки
  pinMode(7, INPUT_PULLUP);//подключаем кнопки
  pinMode(8, INPUT_PULLUP);//подключаем кнопки
  pinMode(9, INPUT_PULLUP);//подключаем кнопки
  pinMode(10, OUTPUT);//подключаем реле
  pinMode(11, OUTPUT);//подключаем реле
  pinMode(12, OUTPUT);//подключаем реле
  pinMode(13, OUTPUT);//подключаем реле
  digitalWrite (rel1, LOW);//отключаем реле при запуске
  digitalWrite (rel2, LOW);//отключаем реле при запуске
  digitalWrite (rel3, LOW);//отключаем реле при запуске
  digitalWrite (reln, LOW);//отключаем реле при запуске
  

/*начало работы*/
  lcd.print("zapusk  vers1.1");
  delay(1000);
  lcd.setCursor(8, 1);//курсор на вторую строку
  lcd.print("proverka");
  delay(2000);

 /*проверка датчиков на работоспосоность*/
  if ( !ds1.getAddress(addr1, 0)){//опрос адреса 1 датчика, если нет ответа то
    lcd.clear();
    lcd.print("temp kom ne rab");
    delay(10000);
  }
  if (!ds2.getAddress(addr2, 0)){//опрос адреса 2 датчика, если нет ответа то
    lcd.clear();
    lcd.print("temp vod ne rab");
    delay(10000);
  }
  //if (!ds3.getAddress(addr3, 0)){//опрос адреса датчика защиты, если нет ответа то
  //  lcd.clear();
  //  lcd.print("zachita ne rab");
  //  delay(10000);
  //  return;
  //}
  lcd.clear();
  lcd.print("vse OK");
  delay(3000);
  lcd.clear();//очистка дисплея*/


  timer = millis();//записываем текущее значение счетчика
  zadp1 = millis();
  zadp2 = millis();
  zadp3 = millis();
  zadpn = millis();
  
  //опрос памяти установленной температуры и состояния реле
  EEPROM.get(0, TUS);
  EEPROM.get(2, ten1);
  EEPROM.get(4, ten2);
  EEPROM.get(6, ten3);
  EEPROM.get(8, nas);
  
  start();
}






void loop(){
 


//опрос температуры 
  if(timer + zad <= millis() && timeDS + zad <= millis()){//задержка опроса температуры
  ds1.requestTemperatures();//опрашиваем температуру на датчике
  ds2.requestTemperatures();//опрашиваем температуру на датчике
  //ds3.requestTemperatures();
  lcd.setCursor(8, 0);
  lcd.print(ds1.getTempCByIndex(0), 0);//вывод на экран температуры - 0-не пишется десятичные
  lcd.setCursor(13,0);
  lcd.print(ds2.getTempCByIndex(0), 0);//вывод на экран температуры
  timeDS = millis();//задержка обновления температуры
  }

/*работа с кнопками*/
   //кнопка влево (подсветка)
 if (digitalRead(left) == LOW && curs == 0) {//включение выключение подсветки
    timer = millis();
    light = !light;
     if (light) {
    lcd.backlight();//включение подсветки
     }
     else {
      lcd.noBacklight();
     }
     delay(100);
  }
    else if (digitalRead(left) == LOW && curs != 0){//меню назад
      if (curs < 10){
       timer = millis();
       curs = 0;
       delay(100);
       start();
      }
      else if (curs > 10 && curs <20){
       curs = 1;
       lcd.clear();
       timer = millis();
      }
        else if (curs > 20 && curs <30){
         curs = 2;
         lcd.clear();
         timer = millis();
        }
          else if (curs > 30 && curs <40){
           curs = 3;
           lcd.clear();
           timer = millis();
          }
            else if (curs > 40 && curs <50){
             curs = 4;
             lcd.clear();
             timer = millis();
            }
              else if (curs > 50 && curs <60){
               curs = 5;
               lcd.clear();
               timer = millis();
              }
              delay(100);
    }
   //кнопка вверх
  else if (digitalRead(up) == LOW && curs == 0) {//увеличение установленной температуры
    lcd.backlight();//включение подсветки
    timer = millis();
    TUS++;
    EEPROM.put(0, TUS);
    lcd.setCursor(3, 0);
    lcd.print(TUS);
    delay(100);
  }
    else if (digitalRead(up) == LOW && curs != 0){//пункты меню
     curs ++;
     lcd.clear();
     timer = millis();
     if (curs > 5 && curs <10){
     curs = 1;
     lcd.clear();
     timer = millis();
     }
      else if (curs > 13 && curs <20){
       curs = 11;
       lcd.clear();
       timer = millis();
      }
       else if (curs > 23 && curs <30){
         curs = 21;
         lcd.clear();
         timer = millis();
       }
        else if (curs > 33 && curs <40){
         curs = 31;
         lcd.clear();
         timer = millis();
        }
          else if (curs > 43 && curs <50){
           curs = 41;
           lcd.clear();
           timer = millis();
          }
            else if (curs > 55){
             curs = 51;
             lcd.clear();
             timer = millis();
            }
     delay(100);
    }
   
   //кнопка вниз
  else if (digitalRead(down) == LOW && curs == 0) {//уменьшение установленной температуры
    lcd.backlight();//включение подсветки
    timer = millis();
    TUS--;
    EEPROM.put(0, TUS);
    lcd.setCursor(3, 0);
    lcd.print(TUS);
    delay(100);
  }
    else if (digitalRead(down) == LOW && curs != 0){//пункты меню
     curs --;
     lcd.clear();
     timer = millis();
     if (curs < 1){
       curs = 5;
       lcd.clear();
       timer = millis();
     }
      else if (curs < 11 && curs > 9){
       curs = 13;
       lcd.clear();
       timer = millis();
      }
        else if (curs < 21 && curs > 19){
         curs = 23;
         lcd.clear();
         timer = millis();
        }
          else if (curs < 31 && curs > 29){
           curs = 33;
           lcd.clear();
           timer = millis();
          }
            else if (curs < 41 && curs > 39){
             curs = 43;
             lcd.clear();
             timer = millis();
            }
              else if (curs < 51 && curs > 49){
               curs = 55;
               lcd.clear();
               timer = millis();
              }
     delay(100);

    }
  
   //кнопка вправо
  else if (digitalRead(right) == LOW && curs == 0) {//вход в меню
    lcd.backlight();//включение подсветки
    lcd.clear();
    timer = millis();
    curs = 1;//запись в переменную положение курсора
    delay(100);
  }
    else if (digitalRead(right) == LOW && curs != 0){//вход в подменю, подтверждение
      if (curs == 1){
       curs = 11;
       lcd.clear();
       timer = millis();
      }
        if (curs == 2){
         curs = 21;
         lcd.clear();
         timer = millis();
        }
          if (curs == 3){
           curs = 31;
           lcd.clear();
           timer = millis();
          }
            if (curs == 4){
             curs = 41;
             lcd.clear();
             timer = millis();
            }
              if (curs == 5){
               curs = 51;
               lcd.clear();
               timer = millis();
              }
              delay(100);
    }
  

  //меню
  if (curs == 1){
    lcd.setCursor(0, 0);
    lcd.print("menu");
    lcd.setCursor(0, 1);
    lcd.print("ten1 ");
    lcd.print(ten1);
    lcd.print("          ");
  }
    else if (curs == 11){
     lcd.setCursor(0, 0);
     lcd.print("ten1");
     lcd.setCursor(0, 1);
     lcd.print("avtomat      ");
     if(ten1 == 'a'){
      lcd.setCursor(14, 1);
      lcd.print('*');
     }
        else if (digitalRead(right) == LOW && curs == 11 && ten1 != 'a'){
         EEPROM.put(2, 'a');
        }
    }
      else if (curs == 12){
       lcd.setCursor(0, 0);
       lcd.print("ten1");
       lcd.setCursor(0, 1);
       lcd.print("vklucheno      ");
        if(ten1 == '+'){
         lcd.setCursor(14, 1);
         lcd.print('*');
        }
          else if (digitalRead(right) == LOW && curs == 12 && ten1 != '+'){
           EEPROM.put(2, '+');
          }
      }
        else if (curs == 13){
         lcd.setCursor(0, 0);
         lcd.print("ten1");
         lcd.setCursor(0, 1);
         lcd.print("otklucheno     ");
          if(ten1 == '-'){
          lcd.setCursor(14, 1);
          lcd.print('*');
          }
            else if (digitalRead(right) == LOW && curs == 13 && ten1 != '-'){
             EEPROM.put(2, '-');
            }
        }

  else if (curs == 2){
    lcd.setCursor(0, 0);
    lcd.print("menu");
    lcd.setCursor(0, 1);
    lcd.print("ten2 ");
    lcd.print(ten2);
    lcd.print("         ");
  }
    else if (curs == 21){
     lcd.setCursor(0, 0);
     lcd.print("ten2");
     lcd.setCursor(0, 1);
     lcd.print("avtomat      ");
      if(ten2 == 'a'){
       lcd.setCursor(14, 1);
       lcd.print('*');
      }
        else if (digitalRead(right) == LOW && curs == 21 && ten2 != 'a'){
         EEPROM.put(4, 'a');
        }
    }
      else if (curs == 22){
       lcd.setCursor(0, 0);
       lcd.print("ten2");
       lcd.setCursor(0, 1);
      lcd.print("vklucheno      ");
        if(ten2 == '+'){
         lcd.setCursor(14, 1);
         lcd.print('*');
        }
          else if (digitalRead(right) == LOW && curs == 22 && ten2 != '+'){
           EEPROM.put(4, '+');
          }
      }
        else if (curs == 23){
         lcd.setCursor(0, 0);
         lcd.print("ten2");
         lcd.setCursor(0, 1);
         lcd.print("otklucheno     ");
          if(ten2 == '-'){
           lcd.setCursor(14, 1);
           lcd.print('*');
          }
            else if (digitalRead(right) == LOW && curs == 23 && ten2 != '-'){
             EEPROM.put(4, '-');
            }
        }
  
  else if (curs == 3){
    lcd.setCursor(0, 0);
    lcd.print("menu");
    lcd.setCursor(0, 1);
    lcd.print("ten3 ");
    lcd.print(ten3);
    lcd.print("         ");
  }
    else if (curs == 31){
     lcd.setCursor(0, 0);
     lcd.print("ten3");
     lcd.setCursor(0, 1);
     lcd.print("avtomat      ");
      if(ten3 == 'a'){
       lcd.setCursor(14, 1);
       lcd.print('*');
      }
        else if (digitalRead(right) == LOW && curs == 31 && ten3 != 'a'){
          EEPROM.put(6, 'a');
        }
    }
      else if (curs == 32){
       lcd.setCursor(0, 0);
       lcd.print("ten3");
       lcd.setCursor(0, 1);
       lcd.print("vklucheno      ");
        if(ten3 == '+'){
         lcd.setCursor(14, 1);
         lcd.print('*');
        }
          else if (digitalRead(right) == LOW && curs == 32 && ten3 != '+'){
           EEPROM.put(6, '+');
          }
      }
        else if (curs == 33){
         lcd.setCursor(0, 0);
         lcd.print("ten3");
         lcd.setCursor(0, 1);
         lcd.print("otklucheno     ");
          if(ten3 == '-'){
           lcd.setCursor(14, 1);
           lcd.print('*');
          }
            else if (digitalRead(right) == LOW && curs == 33 && ten3 != '-'){
             EEPROM.put(6, '-');
            }
       }

  else if (curs == 4){
    lcd.setCursor(0, 0);
    lcd.print("menu");
    lcd.setCursor(0, 1);
    lcd.print("nas  ");
    lcd.print(nas);
    lcd.print("         ");
  }
    else if (curs == 41){
     lcd.setCursor(0, 0);
     lcd.print("nasos");
     lcd.setCursor(0, 1);
     lcd.print("avtomat      ");
      if(nas == 'a'){
       lcd.setCursor(14, 1);
       lcd.print('*');
      }
        else if (digitalRead(right) == LOW && curs == 41 && nas != 'a'){
         EEPROM.put(8, 'a');
        }
    }
      else if (curs == 42){
       lcd.setCursor(0, 0);
       lcd.print("nasos");
       lcd.setCursor(0, 1);
       lcd.print("vklucheno      ");
        if(nas == '+'){
         lcd.setCursor(14, 1);
         lcd.print('*');
        }
          else if (digitalRead(right) == LOW && curs == 42 && nas != '+'){
           EEPROM.put(8, '+');
          }
      }
        else if (curs == 43){
         lcd.setCursor(0, 0);
         lcd.print("nasos");
         lcd.setCursor(0, 1);
         lcd.print("otklucheno     ");
          if(nas == '-'){
           lcd.setCursor(14, 1);
           lcd.print('*');
          }
            else if (digitalRead(right) == LOW && curs == 43 && nas != '-'){
             EEPROM.put(8, '-');
            }
        }

  else if (curs == 5){
    lcd.setCursor(0, 0);
    lcd.print("menu            ");
    lcd.setCursor(0, 1);
    lcd.print("narabotka");
  }
    else if (curs == 51){
      lcd.setCursor(0, 0);
      lcd.print("vremya raboti");
      lcd.setCursor(0, 1);
      EEPROM.get(10, nar1);
      lcd.print("ten1");
      lcd.setCursor(10, 1);
      if (nar1 / 60 < 1 || nar1 / 60 > 4800){lcd.print("0");}
      else{ 
      lcd.print(nar1 / 60);}
    }
      else if (curs == 52){
        lcd.setCursor(0, 0);
        lcd.print("vremya raboti");
        lcd.setCursor(0, 1);
        EEPROM.get(20, nar2);
        lcd.print("ten2");
        lcd.setCursor(10, 1);
        if (nar2 / 60 < 1 || nar1 / 60 > 4800){lcd.print("0");}
        else{
        lcd.print(nar2 / 60);}
      }
        else if (curs == 53){
          lcd.setCursor(0, 0);
          lcd.print("vremya raboti");
          lcd.setCursor(0, 1);
          EEPROM.get(30, nar3);
          lcd.print("ten3");
          lcd.setCursor(10, 1);
          if (nar3 / 60 < 1 || nar1 / 60 > 4800){lcd.print("0");}
          else{
          lcd.print(nar3 / 60);}
        }
          else if (curs == 54){
            lcd.setCursor(0, 0);
            lcd.print("vremya raboti");
            lcd.setCursor(0, 1);
            EEPROM.get(40, narn);
            lcd.print("nas");
            lcd.setCursor(10, 1);
            if (narn / 60 < 1 || nar1 / 60 > 4800){lcd.print("0");}
            else{
            lcd.print(narn / 60);}
          }
            else if (curs == 55){
              lcd.setCursor(0, 0);
              lcd.print("vremya raboti");
              lcd.setCursor(0, 1);
              lcd.print("sbrosit' vremya");
                if (digitalRead(right) == LOW && curs == 55){
                  EEPROM.put(10, 0);
                  delay(100);
                  EEPROM.put(20, 0);
                  delay(100);
                  EEPROM.put(30, 0);
                  delay(100);
                  EEPROM.put(40, 0);
                  delay(100);
                  lcd.clear();
                  lcd.print("sbrosheno");
                  delay(2000);
                  curs = 51;
                }
            }
  
  //сброс действий
  if(timer + 10000 <= millis()){//считаем время после включения или после нажатия кнопки
   lcd.noBacklight();//отключение подсветки
  }
  //обновление экрана
  if(zads + 60000 <= millis() && timer + 60000 <= millis()){//задержка обновления экрана
   curs = 0;
   start();
  }
  if(timer + 10000 <= millis() && curs != 0){//выход из меню по времени
    curs = 0;
    start();
  }
  

/*защита от перегрева устройства
  while (ds3.getTempCByIndex(0) >= 70){
   digitalWrite (rel1, 0);
   digitalWrite (rel2, 0);
   digitalWrite (rel3, 0);
   digitalWrite (reln, 0);
   lcd.clear();
   lcd.backlight();
   lcd.print ("peregrev rele");
   delay(20000);
   ds3.requestTemperatures();
  }
*/

rele();

}



/*работа реле*/
void rele(){
  EEPROM.get(2, ten1);//опрос памяти состояня реле
  EEPROM.get(4, ten2);
  EEPROM.get(6, ten3);
  EEPROM.get(8, nas);
  
 /*rele1*/
  if (ten1 == '+' && curs == 0){ //если реле принудительно включено
    digitalWrite(rel1, 1);
    lcd.setCursor(2, 1);
    lcd.print('+');
    lcd.setCursor(2, 1);
    if (flag1 != 1){//установка флага состояния реле для счета времени
      flag1 = 1;
      zadp1 = millis();
    }
    else if(zadp1 + 600000 <= millis()){//считаем время работы реле 10 минутными отрезками
      nar1 += 10;
      EEPROM.put(10, nar1);
      zadp1 = millis();
    }
  }
    else if (ten1 == '-' && curs == 0){ //принудительное выключение реле
      digitalWrite(rel1, 0);
      lcd.setCursor(2, 1);
      lcd.print('-');
      lcd.setCursor(2, 1);
      flag1 = 0;
    }//автоматический режим работы по установленной температуре
      else if (ten1 == 'a' && curs == 0 && TUS > ds1.getTempCByIndex(0) && millis() > 15000){ 
        digitalWrite(rel1, 1);
        lcd.setCursor(2, 1);
        lcd.print('+');
        lcd.setCursor(2, 1);
        if (flag1 != 1){
          flag1 = 1;
          zadp1 = millis();
        }
          else if(zadp1 + 600000 <= millis()){
            nar1 += 10;
            EEPROM.put(10, nar1);
            zadp1 = millis();
          }
      }
        else if(ten1 == 'a' && curs == 0 && TUS <= ds1.getTempCByIndex(0) && millis() > 15000){
          digitalWrite(rel1, 0);
          lcd.setCursor(2, 1);
          lcd.print('-');
          lcd.setCursor(2, 1);
          flag1 = 0;
        }

 /*rele2*/
  if (ten2 == '+' && curs == 0){ 
    digitalWrite(rel2, 1);
    lcd.setCursor(6, 1);
    lcd.print('+');
    lcd.setCursor(6, 1);
    if (flag2 != 1){
      flag2 = 1;
      zadp2 = millis();
    }
      else if(zadp2 + 600000 <= millis()){
        nar2 += 10;
        EEPROM.put(20, nar2);
        zadp2 = millis();
      }
  }
    else if (ten2 == '-' && curs == 0){ 
      digitalWrite(rel2, 0);
      lcd.setCursor(6, 1);
      lcd.print('-');
      lcd.setCursor(6, 1);
      flag2 = 0;
    }
      else if (ten2 == 'a' && curs == 0 && TUS-1 > ds1.getTempCByIndex(0) && millis() > 15000){ 
        digitalWrite(rel2, 1);
        lcd.setCursor(6, 1);
        lcd.print('+');
        lcd.setCursor(6, 1);
        if (flag2 != 1){
          flag2 = 1;
          zadp2 = millis();
        }
          else if(zadp2 + 600000 <= millis()){
            nar2 += 10;
            EEPROM.put(20, nar2);
            zadp2 = millis();
          }
      }
        else if(ten2 == 'a' && curs == 0 && TUS <= ds1.getTempCByIndex(0) && millis() > 15000){
          digitalWrite(rel2, 0);
          lcd.setCursor(6, 1);
          lcd.print('-');
          lcd.setCursor(6, 1);
          flag2 = 0;
        }

  /*rele3*/
  if (ten3 == '+' && curs == 0){ 
    digitalWrite(rel3, 1);
    lcd.setCursor(10, 1);
    lcd.print('+');
    lcd.setCursor(10, 1);
      if (flag3 != 1){
        flag3 = 1;
        zadp3 = millis();
      }
        else if(zadp3 + 600000 <= millis()){
          nar3 += 10;
          EEPROM.put(30, nar3);
          zadp3 = millis();
        }
  }
    if (ten3 == '-' && curs == 0){ 
      digitalWrite(rel3, 0);
      lcd.setCursor(10, 1);
      lcd.print('-');
      lcd.setCursor(10, 1);
      flag3 = 0;
    }
      else if (ten3 == 'a' && curs == 0 && TUS-2 > ds1.getTempCByIndex(0) && millis() > 15000){ 
        digitalWrite(rel3, 1);
        lcd.setCursor(10, 1);
        lcd.print('+');
        lcd.setCursor(10, 1);
        if (flag3 != 1){
          flag3 = 1;
          zadp3 = millis();
        }
          else if(zadp3 + 600000 <= millis()){
            nar3 += 10;
            EEPROM.put(30, nar3);
            zadp3 = millis();
          }
      }
        else if(ten3 == 'a' && curs == 0 && TUS <= ds1.getTempCByIndex(0) && millis() > 15000){
          digitalWrite(rel3, 0);
          lcd.setCursor(10, 1);
          lcd.print('-');
          lcd.setCursor(10, 1);
          flag3 = 0;
        }


  /*rele4*/
  if (nas == '+' && curs == 0){ 
    digitalWrite(reln, 1);
    lcd.setCursor(15, 1);
    lcd.print('+');
    lcd.setCursor(15, 1);
    if (flagn != 1){
      flagn = 1;
      zadpn = millis();
    }
      else if(zadpn + 600000 <= millis()){
        narn += 10;
        EEPROM.put(40, narn);
        zadpn = millis();
      }
  }
    else if (nas == '-' && curs == 0){ 
      digitalWrite(reln, 0);
      lcd.setCursor(15, 1);
      lcd.print('-');
      lcd.setCursor(15, 1);
      flagn = 0;
    }
      else if (nas == 'a' && curs == 0 && ds2.getTempCByIndex(0) >= 80 && millis() > 15000){ 
        digitalWrite(reln, 1);
        lcd.setCursor(15, 1);
        lcd.print('+');
        lcd.setCursor(15, 1);
        if (flagn != 1){
          flagn = 1;
          zadpn = millis();
        }
          else if(zadpn + 600000 <= millis()){
            narn += 10;
            EEPROM.put(40, narn);
            zadpn = millis();
          }
      }
        else if(nas == 'a' && curs == 0 && ds2.getTempCByIndex(0) <= 60 && millis() > 15000){
          digitalWrite(reln, 0);
          lcd.setCursor(15, 1);
          lcd.print('-');
          lcd.setCursor(15, 1);
          flagn = 0;
        }
}

 



void start(){
  /*показания (прорисовка внешнего вида) данных на экране*/
  lcd.clear();
  lcd.print("tus");//температура установленная
  lcd.setCursor(3, 0);
  lcd.print(TUS);//пишем температуру
  lcd.setCursor(6, 0);
  lcd.print("tk");//температура комнаты
  lcd.setCursor(11, 0);
  lcd.print("tv");//температура воды
  lcd.setCursor(0, 1);
  lcd.print("1 ");//1 тэн
  lcd.setCursor(1, 1);
  lcd.print(ten1);//пишем состояние
  lcd.setCursor(4, 1);
  lcd.print("2 ");//2 тэн
  lcd.setCursor(5, 1);
  lcd.print(ten2);//пишем состояние
  lcd.setCursor(8, 1);
  lcd.print("3 ");//3 тэн
  lcd.setCursor(9, 1);
  lcd.print(ten3);//пишем состояние
  lcd.setCursor(13, 1);
  lcd.print("N ");//насос
  lcd.setCursor(14, 1);
  lcd.print(nas);
  ds1.requestTemperatures();//опрашиваем температуру на датчике комнаты
  ds2.requestTemperatures();//опрашиваем температуру на датчике воды
  ds3.requestTemperatures();//опрашиваем температуру на датчике защиты
  lcd.setCursor(8, 0);
  lcd.print(ds1.getTempCByIndex(0), 0);//вывод на экран температуры - 0-не пишется десятичные
  lcd.setCursor(13,0);
  lcd.print(ds2.getTempCByIndex(0), 0);//вывод на экран температуры
  zads = millis();
}