Применение millis для нескольких процессов

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Posol88 пишет:

Что не так в этой конструкции?  

Отформатировать программу сложно? Чтобы всем (а не только Евгению) было понятно. 

Posol88
Offline
Зарегистрирован: 14.11.2019

mykaida пишет:

Отформатировать программу сложно? 

что имеется ввиду?

Feofan
Offline
Зарегистрирован: 28.05.2017

Ctrl+T

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

Что не так в этой конструкции? 

Вставлена так, что читать невозможно (я не смог). Форматируйте код нормально (уж хотя бы Ctrl+T) если сами не можете. Самому же читать текст легче будет.

Posol88
Offline
Зарегистрирован: 14.11.2019
if (cliCk != 0) {
  cliCk = 0;
  switch (menu) {
    case 21: Time.settime(secT, minT, hoursT, dayT, monthT, yearT, weekdayT); break;
    case 13: switch (c) {
        case 1:        servoOpen();     servoToClose(); break;
        case 2: W2 = true; servoOpen(); TimeWork = millis(); break;
        case 3: W3 = true; servoOpen(); TimeWork = millis(); break;
      }
    case  6: if (On_Off1 == true) {
        On_Off1 = false;
        lcd.setCursor(13, 0);
        lcd.print("OFF");
      }
      if (On_Off1 == false) {
        On_Off1 = true;
        lcd.setCursor(13, 0);
        lcd.print("ON ");
      } break;

    case  9: if (On_Off2 == true) {
        On_Off2 = false;
        lcd.setCursor(13, 0);
        lcd.print("OFF");
      }
      if (On_Off2 == false) {
        On_Off2 = true;
        lcd.setCursor(13, 0);
        lcd.print("ON ");
      } break;

    case 12: if (On_Off3 == true) {
        On_Off3 = false;
        lcd.setCursor(13, 0);
        lcd.print("OFF");
      }
      if (On_Off3 == false) {
        On_Off3 = true;
        lcd.setCursor(13, 0);
        lcd.print("ON ");
      } break;
  }
}

так?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:
OFF не принимает вообще

Кто Вам это сказал? Принимает, только тут же на ON переделывает. Например, строки с №10 по №19

    case  6:
      if (On_Off1 == true) { // Допустим, что это верно
        On_Off1 = false;		// Запомним (*)
        lcd.setCursor(13, 0);
        lcd.print("OFF");		// Типа стало OFF
      }
      if (On_Off1 == false) { // А это уже верно! См. (*) выше
        On_Off1 = true;
        lcd.setCursor(13, 0);
        lcd.print("ON ");    // А вот тут мы затираем OFF нахрен
      } break;

и тоже самое в двух остальных блоках.

Если бы отформатировали программу не для меня, а всегда и смотрели бы на неё отформатированную, то, наверняка бы это заметили.

И, да, кстати, параллельно с экраном печатайте всё в Сериал. Там ведь ничего не затирается. Сразу бы увидели, что OFF появляется, а потом тут же ON и не говорили бы, что OFF никогда не срабатывает. А то Вы с завязанными глазами мины обезвреживаете.

Posol88
Offline
Зарегистрирован: 14.11.2019

Точно! Выражаю ,Вам, благодарность, от всей души! 

замечания учту)

Posol88
Offline
Зарегистрирован: 14.11.2019

надумал я тут проверить, в каком месте у меня код подвисает так, что инкодэр  считывается с пропусками

вбил вывод времени  в середине и в конце выполнения кода. выяснилось - что все задержки , аж ,до 100 миллисикунд происходят между окончанием лупа и его началом. это в порядке вещей или это особенность моей писанины? ежли мой косяк то в какую сторону искать?

#define CLK 2
#define DT 3
#define SW 12
#define RST A0
#define CLK_rts A2
#define DAT A1
#define ventilation 6
#define heater 5
#define FILTER_STEP 3000
#define disk1 0x50
#include <LiquidCrystal_I2C_OLED.h>
#include <Servo.h>
#include <iarduino_RTC.h>
#include "GyverEncoder.h"
#include "iarduino_DHT.h"
#include <Wire.h>
Encoder enc1(CLK, DT, SW, 2);
iarduino_DHT sensor(A3);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;
iarduino_RTC Time (RTC_DS1302, RST, CLK_rts, DAT); //назначение пинов обмена данными RST, CLK, DAT
int hours1 = 0, h1, hours2 = 0, h2,  minutes1 = 0, m1, minutes2 = 0, m2, seconds1 = 0, s1, seconds2 = 0, s2, T1, pos = 0, TimsWorker, hours3 = 0, h3, minutes3 = 0, m3, seconds3 = 0, s3 ;
unsigned int address = 0, address1 = 10, address2 = 20, address3 = 30, address4 = 40, address5 = 50, address6 = 60, address7 = 70, address8 = 80, address9 = 90;
unsigned long filter_timer, filter_timer2, TimeWork, home_timerMenu, userTemp = 15ul, userHum = 70ul, val_humidity, val_temperature, humidity, temperature;
int  ench = 0, enc = 0, yearT, cliCk = 0;
boolean qr = true, QR = true, W2 = false, W3 = false, w, On_Off1 = false, On_Off2 = false, On_Off3 = false;
boolean statusVent = digitalRead(ventilation), statusHeat = digitalRead(heater);
byte  c = 1, menu = 1, secT, minT, hoursT, dayT, monthT, weekdayT, T_W;
byte line_2[8] =
{
  B00010,
  B10101,
  B10101,
  B01110,
  B00100,
  B00100,
  B00100,
};
byte line_1[8] =
{
  B00100,
  B01010,
  B00100,
  B00000,
  B00000,
  B00000,
  B00000,
};
byte line_3[8] =
{
  B11000,
  B01100,
  B00110,
  B00111,
  B00110,
  B01100,
  B11000,
};
byte line_4[8] =
{
  B00000,
  B01100,
  B10010,
  B10000,
  B10000,
  B10010,
  B01100,
};
void setup() {
  delay(300);
  Time.begin();
  Serial.begin(9600);
  Wire.begin();
  pinMode(ventilation, OUTPUT);
  pinMode(heater, OUTPUT);
  digitalWrite(ventilation, HIGH);
  digitalWrite(heater, HIGH);
  attachInterrupt(1, encoder, CHANGE);
  attachInterrupt(0, encoder, CHANGE);
  lcd.init();
  enc1.setTickMode(AUTO);
  servo.attach(6);
  filter_timer = millis();
  filter_timer2 = millis();

  lcd.createChar(1, line_1);
  lcd.createChar(2, line_2);
  lcd.createChar(3, line_3);
  lcd.createChar(4, line_4);
  hours1    = readEEPROM(disk1, address ); h1 =    hours1;
  minutes1  = readEEPROM(disk1, address1); m1 =  minutes1;
  seconds1  = readEEPROM(disk1, address2); s1 =  seconds1;
  hours2    = readEEPROM(disk1, address3); h2 =    hours2;
  minutes2  = readEEPROM(disk1, address4); m2 =  minutes2;
  seconds2  = readEEPROM(disk1, address5); s2 =  seconds2;
  hours3    = readEEPROM(disk1, address6); h3 =    hours3;
  minutes3  = readEEPROM(disk1, address7); m3 =  minutes3;
  seconds3  = readEEPROM(disk1, address8); s3 =  seconds3;
  T_W = readEEPROM(disk1, address9); TimsWorker = T_W * 100; T1 = TimsWorker;

}
void loop() {
  int test = millis();
  Serial.print(test); Serial.println("  mid");
  Time.period(5);
  if (enc1.isHolded()) {
    cliCk += 1;
  }

  if (cliCk != 0) {
    cliCk = 0; home_timerMenu = millis();
    switch (menu) {
      case 21: Time.settime(secT, minT, hoursT, dayT, monthT, yearT, weekdayT); break;
      case 13: switch (c) {
          case 1:        servoOpen();     servoToClose(); break;
          case 2: W2 = true; servoOpen(); TimeWork = millis(); break;
          case 3: W3 = true; servoOpen(); TimeWork = millis(); break;
        }
      case  6: if (On_Off1 == true) {
          On_Off1 = false;
          lcd.setCursor(13, 0);
          lcd.print("OFF");
        }
        else                 {
          On_Off1 = true ;
          lcd.setCursor(13, 0);
          lcd.print("ON ");
        } break;

      case  9: if (On_Off2 == true) {
          On_Off2 = false;
          lcd.setCursor(13, 1);
          lcd.print("OFF");
        }
        else                 {
          On_Off2 = true ;
          lcd.setCursor(13, 1);
          lcd.print("ON ");
        } break;

      case 12: if (On_Off3 == true) {
          On_Off3 = false;
          lcd.setCursor(13, 0);
          lcd.print("OFF");
        }
        else                 {
          On_Off3 = true ;
          lcd.setCursor(13, 0);
          lcd.print("ON ");
        } break;
    }
  }


  if (enc1.isTurn()) {
    lcd.backlight(); home_timerMenu = millis(); QR = false; w = true;  if (enc1.isClick ()) {
      cliCk += 1;
    }
    switch (menu) {
      case 1: if (w == true) {
          lcd.clear();
          lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s"));
          lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity); w = false;
        } break;

      case 2: if (w == true) {
          lcd.clear(); userTemp += ench; ench = 0;
          lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users");
          lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false;
        }

      case 3: if (w == true) {
          lcd.clear(); userHum += ench; ench = 0;
          lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users");
          lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false;
        } break;

      case 4: if (w == true) {
          lcd.clear(); hours1 += ench; ench = 0; if (h1 != hours1) {
            writeEEPROM(disk1, address, hours1);
            h1 = hours1;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false;
        } break;

      case 5: if (w == true) {
          lcd.clear(); minutes1 += ench; ench = 0; if (m1 != minutes1) {
            writeEEPROM(disk1, address1, minutes1);
            m1 = minutes1;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false;
        } break;

      case 6: if (w == true) {
          lcd.clear(); seconds1 += ench; ench = 0; if (s1 != seconds1) {
            writeEEPROM(disk1, address2, seconds1);
            s1 = seconds1;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
            Serial.println("menuOff");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
            Serial.println("menuOn");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(11, 0); lcd.print("s");
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false;
        } break;


      case 7: if (w == true) {
          lcd.clear(); hours2 += ench; ench = 0; if (h2 != hours2) {
            writeEEPROM(disk1, address3, hours2);
            h2 = hours2;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); hours2 += ench; ench = 0; w = false;
        } break;

      case 8: if (w == true) {
          lcd.clear(); minutes2 += ench; ench = 0; if (m2 != minutes2) {
            writeEEPROM(disk1, address4, minutes2);
            m2 = minutes2;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(4, 1); lcd.write(3); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false;
        } break;

      case 9: if (w == true) {
          lcd.clear(); seconds2 += ench; ench = 0; if (s2 != seconds2) {
            writeEEPROM(disk1, address5, seconds2);
            s2 = seconds2;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(8, 1); lcd.write(3); lcd.setCursor(9, 1); lcd.print(seconds2); lcd.setCursor(11, 1); lcd.print("s"); w = false;
        } break;

      case 10: if (w == true) {
          lcd.clear(); hours3 += ench; ench = 0; if (h3 != hours3) {
            writeEEPROM(disk1, address6, hours3);
            h3 = hours3;
          } if (On_Off3 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off3 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          }
          lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false;
        } break;

      case 11: if (w == true) {
          lcd.clear(); minutes3 += ench; ench = 0; if (m3 != minutes3) {
            writeEEPROM(disk1, address7, minutes3);
            m3 = minutes3;
          } if (On_Off3 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off3 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false;
        } break;

      case 12: if (w == true) {
          lcd.clear(); seconds3 += ench; ench = 0; if (s3 != seconds3) {
            writeEEPROM(disk1, address8, seconds3);
            s3 = seconds3;
          } if (On_Off3 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off3 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false;
        } break;

      case 13:  lcd.clear(); c += ench; ench = 0; lcd.setCursor(1, 0); lcd.print("DokopM"); lcd.write(3); lcd.setCursor(10, 1); lcd.print(TimsWorker);
        switch (c) {
          case 1: lcd.setCursor(8, 0); lcd.print("Experemen"); break;
          case 2: lcd.setCursor(8, 0); lcd.print("1/2      "); break;
          case 3: lcd.setCursor(8, 0); lcd.print("Doza     "); break;
        } break;

      case 14: if (w == true) {
          lcd.clear(); T_W += ench; ench = 0; TimsWorker = T_W * 100; if (T1 != TimsWorker) {
            writeEEPROM(disk1, address9, T_W);
            T1 = TimsWorker;
          }
          lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print("TimsWork"); lcd.setCursor(10, 1); lcd.print(TimsWorker); w = false;
        } break;

      case 15: if (w == true) {
          lcd.clear(); secT += ench; ench = 0;
          lcd.setCursor(1, 0); lcd.write(3); lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 16: if (w == true) {
          lcd.clear(); minT += ench; ench = 0;
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(5, 0); lcd.write(3); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 17: if (w == true) {
          lcd.clear(); hoursT += ench; ench = 0;
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.write(3); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 18: if (w == true) {
          lcd.clear(); weekdayT += ench; ench = 0;
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(13, 0); lcd.write(3); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 19: if (w == true) {
          lcd.clear(); dayT += ench; ench = 0;
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(1, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 20: if (w == true) {
          lcd.clear(); monthT += ench; ench = 0;
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(5, 1); lcd.write(3); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 21: if (w == true) {
          lcd.clear(); yearT += ench; ench = 0;
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.write(3); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

    }
  }

  if (enc1.isHolded()) {
    cliCk += 1;
  }

  if (menu == 1) {
    if (millis() - filter_timer2 > 1000ul) {
      lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s"));
      lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity); filter_timer2 = millis();
    }
  }

  Serial.print(test); Serial.println("  mid 2");
  Time.gettime();
  if (On_Off1 == true && qr == true && Time.Hours == hours1 && Time.minutes == minutes1 && Time.seconds == seconds1) {
    qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
  }

  if (On_Off2 == true && qr == true && Time.Hours == hours2 && Time.minutes == minutes2 && Time.seconds == seconds2) {
    qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
  }                                                                              //присвоить переменной значение false

  if (On_Off3 == true && qr == true && Time.Hours == hours3 && Time.minutes == minutes3 && Time.seconds == seconds3) {
    qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
  }

  if (val_humidity    -        userHum > 10  && statusVent == LOW  ) {
    digitalWrite (ventilation, HIGH);
  }
  if (userHum         -   val_humidity > 10  && statusVent == HIGH ) {
    digitalWrite (ventilation, LOW);
  }
  if (userTemp        - val_temperature > 4   && statusHeat == LOW  ) {
    digitalWrite (heater,     HIGH);
  }
  if (val_temperature -       userTemp > 4   && statusHeat == HIGH ) {
    digitalWrite (heater,      LOW);
  }

  if (millis() - TimeWork >= TimsWorker / 2       && W2         == true ) {
    servoToClose();
    W2 = false;
    TimeWork = 0;
  }
  if (millis() - TimeWork >= TimsWorker         && W3         == true ) {
    servoToClose();
    W3 = false;
    TimeWork = 0;
  }
  if (millis() - TimeWork      >= TimsWorker && qr         == false) {
    servoToClose();
    qr = true ;
  }
  if (millis() - home_timerMenu >= 30000     && QR         == false) {
    lcd.noBacklight();
    home_timerMenu = 0;
    QR = true;
    menu = 1;
    c = 1;
    lcd.clear();
  }
  if (millis() - filter_timer  > FILTER_STEP) {
    filter_timer = millis(); Serial.println("dat");
    switch (sensor.read()) {
      case DHT_OK: humidity = sensor.hum; temperature = sensor.tem;
        val_humidity   = (val_humidity   * 5 + humidity   ) / 6;
        val_temperature = (val_temperature * 5 + temperature) / 6;
        if (menu == 1) {
          lcd.setCursor(8, 1);
          lcd.print("     ");
        } break;
      default: lcd.setCursor(8, 1); lcd.print("ERROR"); break;
    }
  }

  if (enc != 0) {
    menu += enc;
    enc = 0;
  }

  if (c > 3)               {
    c = 3;
  } if (c < 1)               {
    c = 1;
  }
  if (menu > 21)        {
    menu = 1;
  } if (menu < 1)        {
    menu = 21;
  }
  if (hours1 > 23)    {
    hours1 = 0;
  } if (hours1 < 0)    {
    hours1 = 23;
  }
  if (minutes1 > 59) {
    minutes1 = 0;
  } if (minutes1 < 0) {
    minutes1 = 59;
  }
  if (seconds1 > 59) {
    seconds1 = 0;
  } if (seconds1 < 0) {
    seconds1 = 59;
  }
  if (hours2 > 23)    {
    hours2 = 0;
  } if (hours2 < 0)    {
    hours2 = 23;
  }
  if (minutes2 > 59) {
    minutes2 = 0;
  } if (minutes2 < 0) {
    minutes2 = 59;
  }
  if (seconds2 > 59) {
    seconds2 = 0;
  } if (seconds2 < 0) {
    seconds2 = 59;
  }
  if (hours3 > 23)    {
    hours3 = 0;
  } if (hours3 < 0)    {
    hours3 = 23;
  }
  if (minutes3 > 59) {
    minutes3 = 0;
  } if (minutes3 < 0) {
    minutes3 = 59;
  }
  if (seconds3 > 59) {
    seconds3 = 0;
  } if (seconds3 < 0) {
    seconds3 = 59;
  }
  if (secT > 60)        {
    secT = 0;
  } if (secT < 0)        {
    secT = 60;
  }
  if (minT > 60)        {
    minT = 0;
  } if (minT < 0)        {
    minT = 60;
  }
  if (hoursT > 23)    {
    hoursT = 0;
  } if (hoursT < 0)    {
    hoursT = 23;
  }
  if (dayT > 31)        {
    dayT = 1;
  } if (dayT < 1)        {
    dayT = 31;
  }
  if (monthT > 12)    {
    monthT = 1;
  } if (monthT < 1)    {
    monthT = 12;
  }
  if (yearT < 2021) {
    yearT = 2021;
  } if (yearT > 3000) {
    yearT = 3000;
  }
  if (weekdayT > 7) {
    weekdayT = 1;
  } if (weekdayT < 1) {
    weekdayT = 7;
  }
  if (TimsWorker < 100) {
    TimsWorker = 100;
  } if (TimsWorker > 20000) {
    TimsWorker = 20000;
  }
  if (enc1.isHolded()) {
    cliCk += 1;
  }
  Serial.println(test);
  test = 0;
}

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) {

  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.write(data);
  Wire.endTransmission();
  delay(5);
}

byte readEEPROM(int deviceaddress, unsigned int eeaddress ) {
  byte rdata = 0xFF;
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8))    ;
  Wire.write((int)(eeaddress & 0xFF))  ;
  Wire.endTransmission();
  Wire.requestFrom(deviceaddress, 1);
  if (Wire.available()) rdata = Wire.read();
  return rdata;
}
void servoOpen() {
  for (pos = 90; pos >= 0; pos -= 1) {
    servo.write(pos);
    delay(5);
  }
  lcd.setCursor(2, 1);
  lcd.print("OPEN");
}
void servoToClose() {
  for (pos = 0; pos <= 90; pos += 1) {
    servo.write(pos);
    delay(5);
  }
  servoDo();
}
void servoDo() {
  for (pos = 90; pos >= 88; pos -= 1) {
    servo.write(pos);
    delay(5);
  }
  lcd.setCursor(2, 1);
  lcd.print("CLOSE ");
}
void encoder () {
  if (enc1.isRight ()) {
    enc ++;
  }
  if (enc1.isLeft  ()) {
    enc --;
  }
  if (enc1.isRightH()) {
    ench++;
  }
  if (enc1.isLeftH ()) {
    ench--;
  }
}

 

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Posol88 пишет:

 аж ,до 100 миллисикунд происходят между окончанием лупа и его началом. это в порядке вещей или это особенность моей писанины? ежли мой косяк то в какую сторону искать?

Это нормально. Перекур это. 

Posol88
Offline
Зарегистрирован: 14.11.2019

Rumata пишет:

Это нормально. Перекур это. 

понял, спасибо)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:
выяснилось - что все задержки , аж ,до 100 миллисикунд происходят между окончанием лупа и его началом.
Каким именно образом это "выяснилось"? Покажите протоколы, хотелось бы на них посмотреть.

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

надумал я тут проверить, в каком месте у меня код подвисает так, что инкодэр  считывается с пропусками

вбил вывод времени  в середине и в конце выполнения кода. выяснилось - что все задержки , аж ,до 100 миллисикунд происходят между окончанием лупа и его началом.

судя по вашему коду - вы это выяснить никак не могли. ибо вы не контролируете время в конце ЛУП

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

 вы это выяснить никак не могли. ибо вы не контролируете время в конце ЛУП

строчка 586 мне рассказывает сколько времени прошло с момента начала лупа

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

Каким именно образом это "выяснилось"? Покажите протоколы, хотелось бы на них посмотреть.

вот выдержка из серийного порта 

4314  mid 2
4314
4344  mid
4344  mid 2
4344
4375  mid
4375  mid 2
dat
4375
4445  mid
4445  mid 2
4445
4446  mid
4446  mid 2
4446
4474  mid

при чем , что интересно, после "холостого" лупа, задержка 6 миллисекунд, а после того в котором проводился расчет(стр. с 649 по 681) задержка минимум 40 мс. и это не во время расчета, а именно между лупами

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

вот выдержка из серийного порта 

4314  mid 2
4314
4344  mid
4344  mid 2
4344
4375  mid
4375  mid 2
dat
4375
4445  mid
4445  mid 2
4445
4446  mid
4446  mid 2
4446
4474  mid

при чем , что интересно, после "холостого" лупа, задержка 6 миллисекунд, а после того в котором проводился расчет(стр. с 649 по 681) задержка минимум 40 мс. и это не во время расчета, а именно между лупами

ничего интересного. Всей этой статистике грош цена - вы измеряете время один единственный раз - в строке 183, в двух других строчках вы заново время из миллис не читаете, а только выводите в сериал старое значение, то самое. что прочли в строке 183.

Поэтому-то в вашей "статистике"  все три значения ВСЕГДА ОДИНАКОВЫЕ, присмотритесь.

 

Ну и смех...

Posol88
Offline
Зарегистрирован: 14.11.2019

упс

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

Ну и смех...

выходит клоун я все таки))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

вот выдержка из серийного порта 

Что-то подобное я и предполагал.

По сути Вам уже объяснили, а чтобы реально что-то увидеть, можно даже не измерять время, просто включите временные метки в мониторе порта и печатайте что-то легко узнаваемое, типа "Enter loop", "Exit loop" - как-нибудь так.

Только между выходом из loop и повторным входом в него не может проходить 100мс. Там ни фига не делается, кроме

if (serialEventRun) serialEventRun();

а это не может время жрать

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

ЕвгенийП пишет:

а это не может время жрать

Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Rumata пишет:

ЕвгенийП пишет:

а это не может время жрать

Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..

Вы бы код приводили. А то, оптимизатор - он хитрый, может и целиком for выкинуть.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Rumata пишет:

Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..

Если цикл пустой, то понятно, что будет разница в разы (ну не на два порядка, конечно, это Вы преувеличили), но в разы. Но чем больше действий в цикле, тем меньше разница, т.к. накладные там константа.

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

Если цикл пустой, то понятно, что будет разница в разы

это по тому, что в лупе есть "for",в котором счет, а в "for" только счет?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

в лупе есть "for",в котором счет, а в "for" только счет?

Вы сами понимаете, что здесь написано? Я - нет.

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

Вы сами понимаете, что здесь написано? Я - нет.

void loop(){
z1
for(n1){
}n2

z2
}

имелось ввиду, что с z1 по z2 проходит времени больше чем с n1 по n2

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Всё равно не понял.

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

Всё равно не понял.

с первой по седьмую строчку код выполняется дольше, чем с третьей по четвертую.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

И что Вас смущает?

Давайте так. Вы приводите нормальный код, который можно запустить и посмотреть что там и как выполняется и мы его обсуждаем. Потому, что обсуждение сферического кода ... я такого не курю.

Posol88
Offline
Зарегистрирован: 14.11.2019

Здравствуйте уважаемые форумчане. приближается новый год, а значит время очередного обострения. 

взялся я вновь доделывать кормушку и столкнулся с очередной проблемой - по I2c у меня два устройства общаются  - внешняя память на AT24C256B и LCD дисплей (самый стандартный). 

без памяти все работает отлично(дисплей и программа), как только подключаю память и пытаюсь в нее сто либо записать на дисплее начинает твориться дичь и через какое то время все зависает. 

у памяти же свой адрес устройства, а у дисплея свой. как они пересекаются?

#define CLK 0
#define DT 1
#define SW 9
#define RST A0
#define CLK_rts A2
#define DAT A3
#define ventilation 6
#define heater 5
#define FILTER_STEP 3000
#define disk1 0x50
#include <LiquidCrystal_I2C_OLED.h>
#include <Servo.h>
#include <iarduino_RTC.h>
#include "GyverEncoder.h"
#include "iarduino_DHT.h"
#include <Wire.h>
Encoder enc1(CLK, DT, SW, 2);
iarduino_DHT sensor(A1);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;
iarduino_RTC Time (RTC_DS1302, RST, CLK_rts, DAT); //назначение пинов обмена данными RST, CLK, DAT
int hours1 = 0, h1, hours2 = 0, h2,  minutes1 = 0, m1, minutes2 = 0, m2, seconds1 = 0, s1, seconds2 = 0, s2, T1, pos = 0, TimsWorker, hours3 = 0, h3, minutes3 = 0, m3, seconds3 = 0, s3 ;
unsigned int address = 0, address1 = 10, address2 = 20, address3 = 30, address4 = 40, address5 = 50, address6 = 60, address7 = 70, address8 = 80, address9 = 90;
unsigned long filter_timer, filter_timer2, TimeWork, home_timerMenu, userTemp = 15ul, userHum = 70ul, val_humidity, val_temperature, humidity, temperature;
int  ench = 0, enc = 0, yearT, cliCk = 0;
boolean qr = true, QR = true, W2 = false, W3 = false, w, On_Off1 = true, On_Off2 = true, On_Off3 = false;
boolean statusVent = digitalRead(ventilation), statusHeat = digitalRead(heater);
byte  c = 1, menu = 1, secT, minT, hoursT, dayT, monthT, weekdayT, T_W;
byte line_2[8] =
{
  B00010,
  B10101,
  B10101,
  B01110,
  B00100,
  B00100,
  B00100,
};
byte line_1[8] =
{
  B00100,
  B01010,
  B00100,
  B00000,
  B00000,
  B00000,
  B00000,
};
byte line_3[8] =
{
  B11000,
  B01100,
  B00110,
  B00111,
  B00110,
  B01100,
  B11000,
};
byte line_4[8] =
{
  B00000,
  B01100,
  B10010,
  B10000,
  B10000,
  B10010,
  B01100,
};
void setup() {
  delay(300);
  Time.begin();
  Serial.begin(9600);
  Wire.begin();
  pinMode(ventilation, OUTPUT);
  pinMode(heater, OUTPUT);
  digitalWrite(ventilation, HIGH);
  digitalWrite(heater, HIGH);
  attachInterrupt(2, encoder, CHANGE);
  attachInterrupt(3, encoder, CHANGE);
  lcd.init();
  enc1.setTickMode(AUTO);
  servo.attach(14);
  filter_timer = millis();
  filter_timer2 = millis();
  lcd.createChar(1, line_1);
  lcd.createChar(2, line_2);
  lcd.createChar(3, line_3);
  lcd.createChar(4, line_4);
  hours1    = readEEPROM(disk1, address ); h1 =    hours1;
  minutes1  = readEEPROM(disk1, address1); m1 =  minutes1;
  seconds1  = readEEPROM(disk1, address2); s1 =  seconds1;
  hours2    = readEEPROM(disk1, address3); h2 =    hours2;
  minutes2  = readEEPROM(disk1, address4); m2 =  minutes2;
  seconds2  = readEEPROM(disk1, address5); s2 =  seconds2;
  hours3    = readEEPROM(disk1, address6); h3 =    hours3;
  minutes3  = readEEPROM(disk1, address7); m3 =  minutes3;
  seconds3  = readEEPROM(disk1, address8); s3 =  seconds3;
  T_W = readEEPROM(disk1, address9); TimsWorker = T_W * 100; T1 = TimsWorker;

}
void loop() {
  Serial.print("Xyu");
  Time.period(5);
  if (enc1.isHolded()) {
    cliCk += 1;
  }
  if (cliCk != 0) {
    cliCk = 0; home_timerMenu = millis();
    switch (menu) {
      case 21: Time.settime(secT, minT, hoursT, dayT, monthT, yearT, weekdayT); break;
      case 13: switch (c) {
          case 1:        servoOpen();     servoToClose(); break;
          case 2: W2 = true; servoOpen(); TimeWork = millis(); break;
          case 3: W3 = true; servoOpen(); TimeWork = millis(); break;
        }
      case  6: if (On_Off1 == true) {
          On_Off1 = false;
          lcd.setCursor(13, 0);
          lcd.print("OFF");
        }
        else                 {
          On_Off1 = true ;
          lcd.setCursor(13, 0);
          lcd.print("ON ");
        } break;

      case  9: if (On_Off2 == true) {
          On_Off2 = false;
          lcd.setCursor(13, 1);
          lcd.print("OFF");
        }
        else                 {
          On_Off2 = true ;
          lcd.setCursor(13, 1);
          lcd.print("ON ");
        } break;

      case 12: if (On_Off3 == true) {
          On_Off3 = false;
          lcd.setCursor(13, 0);
          lcd.print("OFF");
        }
        else                 {
          On_Off3 = true ;
          lcd.setCursor(13, 0);
          lcd.print("ON ");
        } break;
    }
  }
  if (enc1.isTurn()) {
    lcd.backlight(); home_timerMenu = millis(); QR = false; w = true;  if (enc1.isClick ()) {
      cliCk += 1;
    }
    if (enc != 0) {
      menu += enc;
      enc = 0;
      if (menu > 21) {
        menu = 1;
      } if (menu < 1) {
        menu = 21;
      }
    }
    switch (menu) {
      case 1: if (w == true) {
          lcd.clear();
          lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s"));
          lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity); w = false;
        } break;

      case 2: if (w == true) {
          lcd.clear(); userTemp += ench; ench = 0;
          lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users");
          lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false;
        } break;

      case 3: if (w == true) {
          lcd.clear(); userHum += ench; ench = 0;
          lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users");
          lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false;
        } break;

      case 4: if (w == true) {
          lcd.clear(); hours1 += ench; ench = 0; if (hours1 > 23) {
            hours1 = 0;
          } if (hours1 < 0) {
            hours1 = 23;
          } if (h1 != hours1) {
            writeEEPROM(disk1, address, hours1);
            h1 = hours1;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false;
        } break;

      case 5: if (w == true) {
          lcd.clear(); minutes1 += ench; ench = 0; if (minutes1 > 59) {
            minutes1 = 0;
          } if (minutes1 < 0) {
            minutes1 = 59;
          } if (m1 != minutes1) {
            writeEEPROM(disk1, address1, minutes1);
            m1 = minutes1;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false;
        } break;

      case 6: if (w == true) {
          lcd.clear(); seconds1 += ench; ench = 0; if (seconds1 > 59) {
            seconds1 = 0;
          } if (seconds1 < 0) {
            seconds1 = 59;
          } if (s1 != seconds1) {
            writeEEPROM(disk1, address2, seconds1);
            s1 = seconds1;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(11, 0); lcd.print("s");
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false;
        } break;


      case 7: if (w == true) {
          lcd.clear(); hours2 += ench; ench = 0; if (hours2 > 23) {
            hours2 = 0;
          } if (hours2 < 0) {
            hours2 = 23;
          } if (h2 != hours2) {
            writeEEPROM(disk1, address3, hours2);
            h2 = hours2;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); hours2 += ench; ench = 0; w = false;
        } break;

      case 8: if (w == true) {
          lcd.clear(); minutes2 += ench; ench = 0; if (minutes2 > 59) {
            minutes2 = 0;
          } if (minutes2 < 0) {
            minutes2 = 59;
          } if (m2 != minutes2) {
            writeEEPROM(disk1, address4, minutes2);
            m2 = minutes2;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(4, 1); lcd.write(3); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false;
        } break;

      case 9: if (w == true) {
          lcd.clear(); seconds2 += ench; ench = 0; if (seconds2 > 59) {
            seconds2 = 0;
          } if (seconds2 < 0) {
            seconds2 = 59;
          } if (s2 != seconds2) {
            writeEEPROM(disk1, address5, seconds2);
            s2 = seconds2;
          } if (On_Off1 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off1 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          } if (On_Off2 == true) {
            lcd.setCursor(13, 1);
            lcd.print("ON ");
          } if (On_Off2 == false) {
            lcd.setCursor(13, 1);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1);
          lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(8, 1); lcd.write(3); lcd.setCursor(9, 1); lcd.print(seconds2); lcd.setCursor(11, 1); lcd.print("s"); w = false;
        } break;

      case 10: if (w == true) {
          lcd.clear(); hours3 += ench; ench = 0; if (hours3 > 23)    {
            hours3 = 0;
          } if (hours3 < 0)    {
            hours3 = 23;
          } if (h3 != hours3) {
            writeEEPROM(disk1, address6, hours3);
            h3 = hours3;
          } if (On_Off3 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off3 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          }
          lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false;
        } break;

      case 11: if (w == true) {
          lcd.clear(); minutes3 += ench; ench = 0; if (minutes3 > 59) {
            minutes3 = 0;
          } if (minutes3 < 0) {
            minutes3 = 59;
          } if (m3 != minutes3) {
            writeEEPROM(disk1, address7, minutes3);
            m3 = minutes3;
          } if (On_Off3 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off3 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false;
        } break;

      case 12: if (w == true) {
          lcd.clear(); seconds3 += ench; ench = 0; if (seconds3 > 59) {
            seconds3 = 0;
          } if (seconds3 < 0) {
            seconds3 = 59;
          } if (s3 != seconds3) {
            writeEEPROM(disk1, address8, seconds3);
            s3 = seconds3;
          } if (On_Off3 == true) {
            lcd.setCursor(13, 0);
            lcd.print("ON ");
          } if (On_Off3 == false) {
            lcd.setCursor(13, 0);
            lcd.print("OFF");
          }
          lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false;
        } break;

      case 13:  lcd.clear(); c += ench; ench = 0; if (c > 3) {
          c = 3;
        } if (c < 1) {
          c = 1;
        } lcd.setCursor(1, 0); lcd.print("DokopM"); lcd.write(3); lcd.setCursor(10, 1); lcd.print(TimsWorker);
        switch (c) {
          case 1: lcd.setCursor(8, 0); lcd.print("Experemen"); break;
          case 2: lcd.setCursor(8, 0); lcd.print("1/2      "); break;
          case 3: lcd.setCursor(8, 0); lcd.print("Doza     "); break;
        } break;

      case 14: if (w == true) {
          lcd.clear(); T_W += ench; ench = 0; TimsWorker = T_W * 100; if (TimsWorker < 100) {
            TimsWorker = 100;
          } if (TimsWorker > 20000) {
            TimsWorker = 20000;
          } if (T1 != TimsWorker) {
            writeEEPROM(disk1, address9, T_W);
            T1 = TimsWorker;
          }
          lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print("TimsWork"); lcd.setCursor(10, 1); lcd.print(TimsWorker); w = false;
        } break;

      case 15: if (w == true){
          lcd.clear(); secT += ench; ench = 0; if (secT > 60){
            secT = 0;
          } if (secT < 0){
            secT = 60;
          }
          lcd.setCursor(1, 0); lcd.write(3); lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 16: if (w == true){
          lcd.clear(); minT += ench; ench = 0; if (minT > 60){
            minT = 0;
          } if (minT < 0){
            minT = 60;
          }
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(5, 0); lcd.write(3); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 17: if (w == true) {
          lcd.clear(); hoursT += ench; ench = 0; if (hoursT > 23)    {
            hoursT = 0;
          } if (hoursT < 0)    {
            hoursT = 23;
          }
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.write(3); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 18: if (w == true) {
          lcd.clear(); weekdayT += ench; ench = 0; if (weekdayT > 7) {
            weekdayT = 1;
          } if (weekdayT < 1) {
            weekdayT = 7;
          }
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(13, 0); lcd.write(3); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 19: if (w == true) {
          lcd.clear(); dayT += ench; ench = 0; if (dayT > 31)        {
            dayT = 1;
          } if (dayT < 1)        {
            dayT = 31;
          }
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(1, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 20: if (w == true) {
          lcd.clear(); monthT += ench; ench = 0; if (monthT > 12)    {
            monthT = 1;
          } if (monthT < 1)    {
            monthT = 12;
          }
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(5, 1); lcd.write(3); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;

      case 21: if (w == true) {
          lcd.clear(); yearT += ench; ench = 0; if (yearT < 2021) {
            yearT = 2021;
          } if (yearT > 3000) {
            yearT = 3000;
          }
          lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
          lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.write(3); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
        } break;
    }
  }

  if (menu == 1) {
    if (millis() - filter_timer2 > 1000ul) {
      lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s"));
      lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity); filter_timer2 = millis();
    }
  }

  Time.gettime();
  if (On_Off1 == true && qr == true && Time.Hours == hours1 && Time.minutes == minutes1 && Time.seconds == seconds1) {
    qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
  }

  if (On_Off2 == true && qr == true && Time.Hours == hours2 && Time.minutes == minutes2 && Time.seconds == seconds2) {
    qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
  }                                                                              //присвоить переменной значение false

  if (On_Off3 == true && qr == true && Time.Hours == hours3 && Time.minutes == minutes3 && Time.seconds == seconds3) {
    qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
  }

  //if (val_humidity - userHum> 10 && statusVent == LOW ){digitalWrite (ventilation,HIGH);}
  //if (userHum - val_humidity> 10 && statusVent == HIGH ){digitalWrite (ventilation, LOW);}
  if (userTemp - val_temperature > 4 && statusHeat == LOW ) {
    digitalWrite (heater,     HIGH);
  }
  if (val_temperature -       userTemp > 4   && statusHeat == HIGH ) {
    digitalWrite (heater,      LOW);
  }

  if (millis() - TimeWork >= TimsWorker / 2 && W2 == true ) {
    servoToClose();
    W2 = false;
    TimeWork = 0;
  }
  if (millis() - TimeWork >= TimsWorker && W3 == true) {
    servoToClose();
    W3 = false;
    TimeWork = 0;
  }
  if (millis() - TimeWork >= TimsWorker && qr == false) {
    servoToClose();
    qr = true ;
  }
  if (millis() - home_timerMenu >= 30000 && QR == false) {
    lcd.noBacklight();
    home_timerMenu = 0;
    QR = true;
    menu = 1;
    c = 1;
    lcd.clear();
  }
  if (millis() - filter_timer  > FILTER_STEP) {
    filter_timer = millis(); Serial.println("dat");
    switch (sensor.read()) {
      case DHT_OK: humidity = sensor.hum; temperature = sensor.tem;
        val_humidity   = (val_humidity   * 5 + humidity   ) / 6;
        val_temperature = (val_temperature * 5 + temperature) / 6;
        if (menu == 1) {
          lcd.setCursor(8, 1);
          lcd.print("     ");
        } break;
      default: lcd.setCursor(8, 1); lcd.print("ERROR"); break;
    }
  }
}

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) {
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.write(data);
  Wire.endTransmission();
  delay(5);
}

byte readEEPROM(int deviceaddress, unsigned int eeaddress ) {
  byte rdata = 0xFF;
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8))    ;
  Wire.write((int)(eeaddress & 0xFF))  ;
  Wire.endTransmission();
  Wire.requestFrom(deviceaddress, 1);
  if (Wire.available()) rdata = Wire.read();
  return rdata;
}
void servoOpen() {
  for (pos = 90; pos >= 0; pos -= 1) {
    servo.write(pos);
    delay(5);
  }
  lcd.setCursor(2, 1);
  lcd.print("OPEN");
}
void servoToClose() {
  for (pos = 0; pos <= 90; pos += 1) {
    servo.write(pos);
    delay(5);
  }
  servoDo();
}
void servoDo() {
  for (pos = 90; pos >= 88; pos -= 1) {
    servo.write(pos);
    delay(5);
  }
  lcd.setCursor(2, 1);
  lcd.print("CLOSE ");
}
void encoder () {
  if (enc1.isRight ()) {
    enc ++;
  }
  if (enc1.isLeft  ()) {
    enc --;
  }
  if (enc1.isRightH()) {
    ench++;
  }
  if (enc1.isLeftH ()) {
    ench--;
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Давайте ссылки на вот эти библиотеки:

  1. LiquidCrystal_I2C_OLED.h
  2. iarduino_RTC.h
  3. GyverEncoder.h
  4. iarduino_DHT.h

Откуда нам знать, где Вы из брали?

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

Давайте ссылки на вот эти библиотеки:

  1. LiquidCrystal_I2C_OLED.h
  2. iarduino_RTC.h
  3. GyverEncoder.h
  4. iarduino_DHT.h

Откуда нам знать, где Вы из брали?

https://disk.yandex.ru/d/DSa1wrdmVT9QnA

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Во-первых, там капча - имейте совесть. Но я даже её ввёл, но LiquidCrystal_I2C_OLED там нет. Это Вы так пошутили?

Posol88
Offline
Зарегистрирован: 14.11.2019

да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q

P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Posol88 пишет:

да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q

P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется. 

ну уж нет!

###########################################
# Syntax Coloring Map For LiquidCrystal_I2C
###########################################

###########################################
# Datatypes (KEYWORD1)
###########################################

LiquidCrystal_I2C    KEYWORD1

###########################################
# Methods and Functions (KEYWORD2)
###########################################

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q

P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется. 

Сейчас Вы приложили другую. Сравните архивы. В той просто не было файла с таким именем.

Posol88
Offline
Зарегистрирован: 14.11.2019

понял, ошибся значит - не специально.

 

Posol88
Offline
Зарегистрирован: 14.11.2019

ua6em пишет:

ну уж нет!

###########################################
# Syntax Coloring Map For LiquidCrystal_I2C
###########################################

###########################################
# Datatypes (KEYWORD1)
###########################################

LiquidCrystal_I2C    KEYWORD1

###########################################
# Methods and Functions (KEYWORD2)
###########################################

 

не понял вообще ни чего

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Скомпилировал Вашу программу.

Полюбуйтесь на листинг предупреждений:

In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC.h:33:0,
                 from C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:13:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'bool iarduino_RTC_DS1302::funcWriteReg(uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:59:3: warning: no return statement in function returning non-void [-Wreturn-type]
   }                      //
   ^
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'void iarduino_RTC_DS1302::funcWriteByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:62:202: warning: comparison is always true due to limited range of data type [-Wtype-limits]
   void funcWriteByte (uint8_t j)              /* Передача  одного байта  (байт для передачи)         */ {uint8_t i=0, n=500/busRate+1; pinMode(pinDAT, OUTPUT); while(i>=0 && i<8){digitalWrite(pinDAT, (j & _BV(i))); delayMicroseconds(n); digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); i++;} pinMode(pinDAT, INPUT);}
                                                                                                                                                                                                         ~^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'uint8_t iarduino_RTC_DS1302::funcReadByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:63:301: warning: comparison is always true due to limited range of data type [-Wtype-limits]
   uint8_t funcReadByte (bool j)              /* Получение одного байта  (флаг чтения предустановленного бита с линии DAT) */ {uint8_t i=0, k=0, n=500/busRate+1; pinMode(pinDAT, INPUT); if(j){if(digitalRead(pinDAT)){k |= _BV(i);} i++;} while(i>=0 && i<8){digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); delayMicroseconds(n); if(digitalRead(pinDAT)){k |= _BV(i);} i++;} return k;}
                                                                                                                                                                                                                                                                                                            ~^~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1307.h:4:0,
                 from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC.h:34,
                 from C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:13:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::sendID(uint8_t, bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:322:23: warning: unused parameter 'adr' [-Wunused-parameter]
   bool sendID(uint8_t adr, bool rw){          // Аргументы: ID-адрес модуля, бит RW (0-запись, 1-чтение)
                       ^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:322:33: warning: unused parameter 'rw' [-Wunused-parameter]
   bool sendID(uint8_t adr, bool rw){          // Аргументы: ID-адрес модуля, бит RW (0-запись, 1-чтение)
                                 ^~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::setByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:360:24: warning: unused parameter 'data' [-Wunused-parameter]
   bool setByte(uint8_t data){            // Аргумент: байт для передачи.
                        ^~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual uint8_t iarduino_I2C::getByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:394:24: warning: unused parameter 'ack' [-Wunused-parameter]
   uint8_t getByte(bool ack){             // Аргумент: бит подтверждения ACK/NACK
                        ^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino: In function 'void loop()':
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:413:22: warning: comparison is always false due to limited range of data type [-Wtype-limits]
           } if (secT < 0){
                 ~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:423:22: warning: comparison is always false due to limited range of data type [-Wtype-limits]
           } if (minT < 0){
                 ~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:433:24: warning: comparison is always false due to limited range of data type [-Wtype-limits]
           } if (hoursT < 0)    {
                 ~~~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:511:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (millis() - TimeWork >= TimsWorker / 2 && W2 == true ) {
       ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:516:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (millis() - TimeWork >= TimsWorker && W3 == true) {
       ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:521:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (millis() - TimeWork >= TimsWorker && qr == false) {
       ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::begin(uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:64:39: warning: unused parameter 'cols' [-Wunused-parameter]
 void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
                                       ^~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::setDelay(int, int)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:412:39: warning: unused parameter 'cmdDelay' [-Wunused-parameter]
 void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {}
                                       ^~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:412:52: warning: unused parameter 'charDelay' [-Wunused-parameter]
 void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {}
                                                    ^~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:415:50: warning: unused parameter 'graphtype' [-Wunused-parameter]
 uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t graphtype){return 0;}
                                                  ^~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t, uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:55: warning: unused parameter 'row' [-Wunused-parameter]
 void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_col_end){}
                                                       ^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:68: warning: unused parameter 'column' [-Wunused-parameter]
 void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_col_end){}
                                                                    ^~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:84: warning: unused parameter 'len' [-Wunused-parameter]
 void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_col_end){}
                                                                                    ^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:98: warning: unused parameter 'pixel_col_end' [-Wunused-parameter]
 void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_col_end){}
                                                                                                  ^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::draw_vertical_graph(uint8_t, uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:53: warning: unused parameter 'row' [-Wunused-parameter]
 void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_row_end){}
                                                     ^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:66: warning: unused parameter 'column' [-Wunused-parameter]
 void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_row_end){}
                                                                  ^~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:82: warning: unused parameter 'len' [-Wunused-parameter]
 void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_row_end){}
                                                                                  ^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:96: warning: unused parameter 'pixel_row_end' [-Wunused-parameter]
 void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_row_end){}
                                                                                                ^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::setContrast(uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:418:45: warning: unused parameter 'new_val' [-Wunused-parameter]
 void LiquidCrystal_I2C::setContrast(uint8_t new_val){}
                                             ^~~~~~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.h:33:0,
                 from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:1:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'bool iarduino_RTC_DS1302::funcWriteReg(uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:59:3: warning: no return statement in function returning non-void [-Wreturn-type]
   }                      //
   ^
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'void iarduino_RTC_DS1302::funcWriteByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:62:202: warning: comparison is always true due to limited range of data type [-Wtype-limits]
   void funcWriteByte (uint8_t j)              /* Передача  одного байта  (байт для передачи)         */ {uint8_t i=0, n=500/busRate+1; pinMode(pinDAT, OUTPUT); while(i>=0 && i<8){digitalWrite(pinDAT, (j & _BV(i))); delayMicroseconds(n); digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); i++;} pinMode(pinDAT, INPUT);}
                                                                                                                                                                                                         ~^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'uint8_t iarduino_RTC_DS1302::funcReadByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:63:301: warning: comparison is always true due to limited range of data type [-Wtype-limits]
   uint8_t funcReadByte (bool j)              /* Получение одного байта  (флаг чтения предустановленного бита с линии DAT) */ {uint8_t i=0, k=0, n=500/busRate+1; pinMode(pinDAT, INPUT); if(j){if(digitalRead(pinDAT)){k |= _BV(i);} i++;} while(i>=0 && i<8){digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); delayMicroseconds(n); if(digitalRead(pinDAT)){k |= _BV(i);} i++;} return k;}
                                                                                                                                                                                                                                                                                                            ~^~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1307.h:4:0,
                 from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.h:34,
                 from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:1:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t, uint8_t*, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:145:29: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
      if (sum) { if(TWSR&0xF8!=0x50) {  i=0;}}    // Если после чтения очередного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x50 значит произошла ошибка при чтении
                         ~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:146:26: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
      else  { if(TWSR&0xF8!=0x58) {  i=0;}}    // Если после чтения последного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x58 значит произошла ошибка при чтении
                      ~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t*, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:168:29: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
      if (sum) { if(TWSR&0xF8!=0x50) {  i=0;}}    // Если после чтения очередного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x50 значит произошла ошибка при чтении
                         ~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:169:26: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
      else  { if(TWSR&0xF8!=0x58) {  i=0;}}    // Если после чтения последного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x58 значит произошла ошибка при чтении
                      ~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp: In member function 'char* iarduino_RTC::gettime(const char*)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:6:26: warning: unused variable 'f' [-Wunused-variable]
    uint8_t j, k, n; bool f;                  // Объявляем локальные переменные
                          ^
C:\GoogleD\Soft\libraries\iarduino_DHT-master\src\iarduino_DHT.cpp: In member function 'int8_t iarduino_DHT::readSDA()':
C:\GoogleD\Soft\libraries\iarduino_DHT-master\src\iarduino_DHT.cpp:31:55: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
   if( (reply[0]==0) || (reply[1]!=0) || (reply[2]&0x80>0) ) { model=22; }               // Датчик определён как DHT22, так как DHT11 возвращает влажность более 10%, без десятых долей, а температуру без отрицательных значений.
                                                   ~~~~^~
Скетч использует 23630 байт (76%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 920 байт (44%) динамической памяти, оставляя 1128 байт для локальных переменных. Максимум: 2048 байт.

Часть из них - просто следствие небрежного программирования, друиге - признак возможной ошибки, а третьи - просто стопудовые ошибки (эти я выделил жирным, если ничего не пропустил). Например, в строке №413 Вы пишете

if (secT < 0)

компилятор Вас предупреждает, что условие в скобках ВСЕГДА ложно. Значит, то, что после if, НИКОГДА не выполнится. Но ведь зачем-то Вы это писали? Неужели Вас не насторожило, что часть Вашего кода не будет исполняться никогда и Вы не посчитали это ошибкой?

Причём, большая часть предупреждений приходится на библиотеки. Вы действительно считаете, что столь небрежно написанные библиотеки можно включать в свой код?

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

 Вы действительно считаете, что столь небрежно написанные библиотеки можно включать в свой код?

честно говоря я библиотеки ни когда не проверял. как то раз смотрел урок гайвера про написание библиотек, но этим моё изучение их ограничилось.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

честно говоря я библиотеки ни когда не проверял. 

Что значит "не проверял"? Вы что, не видели этой длинной портянки предупреждений, которую я привёл? А если видели, то никакой другой проверки и не надо - просто смотрите сколько там всего! Причём, повторяю, часть - просто небрежность, но есть и такие, что явно свидетельствуют об ошибках. Просто смотрите и ... либо надо править библиотеку, либо искать другую, но пользоваться такими - это искать приключений себе на все места.

Posol88
Offline
Зарегистрирован: 14.11.2019

а что за компилятор у вас такой? мой пишет  - "Скетч использует 23630 байт (73%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 920 байт (44%) динамической памяти, оставляя 1128 байт для локальных переменных. Максимум: 2048 байт."

и ни каких ошибок и предупреждений
 
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Posol88
Offline
Зарегистрирован: 14.11.2019

о как, спасибо) 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Понятно. Вы, тут вроде давно, но, наверное, пропустили мой постоянный мат на эту тему.

Дело в том, что разработчики IDE по умолчанию выключили вывод любых предупреждений. Видимо, для того, чтобы не смущать всякими глупостЯми блондинок и беременных доярок, которых они считают своими "целевыми пользователями".

Если Вы планируете делать хоть что-то сложнее блинка, Вы просто обязаны включить вывод сообщений. Зайдите в "Настройки" и сделайте, как на этой картинке - "Сообщения компилятора - Все" (сейчас у Вас там выбрано "Ничего")

У Вас просто глаза откроются. А то сейчас Вы спрятали голову в песок - "ошибок видеть не хочу, они мне нервы портят" :-)

Сразу увидите простыню предупреждений. Разбирайтесь с ними.

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

 Разбирайтесь с ними.

спасибо, попробую)

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

 Разбирайтесь с ними.

проведя несколько часов в попытках разобраться как исправить ошибки в библиотеках - я понял, что когда человек в собственном коде с трудом разбирается, то в чужом ему вообще делать нечего. 

я за лето половину забыл того что знал, а там 80%того что я и не знал) на C или C++ написано

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Posol88 пишет:

я за лето половину забыл того что знал, а там 80%того что я и не знал) на C или C++ написано

Тоже такое случается постоянно каждую осень. Есть идеи как победить ситуацию? Можно клуб замутить, кстати

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Моё видение этого безобразия:

1. Создаём переменные под каждый процесс

2. В цикле программы набавляем единичку на наименьшее общее кратное времени процессов

3. При срабатывании процесса переменная обнуляется

Posol88
Offline
Зарегистрирован: 14.11.2019

этот форум фактически и есть такой клуб))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:
в попытках разобраться как исправить ошибки в библиотеках
А я же Вам говорил, что надо
ЕвгенийП пишет:
либо надо править библиотеку, либо искать другую
В частности, опыт показывает, что библиотеки, начинающиеся с "iarduino" использовать просто нельзя от слова "никогда".

Posol88
Offline
Зарегистрирован: 14.11.2019

В итоге выяснилось - что все проблемы были из за подтягивающих резисторов в 10кОм. хотя в даташите написано " When using a pull-upresistor, Atmel recommends using 10kΩ or less."  у меня корректно заработало только при использовании 2кОм.