инкубатор под управлением Ардуино Уно

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

tamerlan37 пишет:

PID это по суте силовой ключ с опторозвязкой ну и к нему нужен код соответственно и библиотека.А функцыя его в том чтобы поддерживать заданую температуру .

Привет. Нет, ПИД это Пропорционально-Интегрально-Дифференциальный регулятор. На пальцах трудно объяснить его работу, но только он может максимально быстро, четко и без проскоков стабилизировать заданный параметр меняя силу воздействия по сложному закону. Конечно если правильно настроен. Примерно как круиз-контроль на автомобиле. В большом инкубаторе он очень нужен и в маленьком лишним не будет.

aljoshka
Offline
Зарегистрирован: 03.03.2014

откопал вот такой актуатор (возможно подойдёт для переворота), 24в, 19ом, 4пин... какой контроллер посоветуете? 

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Он AC или DC? На постоянку MOSFET, на переменку симистор или твердотельные реле на что угодно. Да хоть и обычные реле, поворот же не часто происходит. На моих раз в 2 часа. Чаще чем раз в час не делают и считается вредным. Я не проверял лично, но солидарен.

aljoshka
Offline
Зарегистрирован: 03.03.2014

ето вы походу о подключении питания, но там 4 провода, подавал 12в постоянного тока, он лишь дёргался... схож с шаговиком по поведению, вот и как таким управлять? ;)

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Ну скорее всего шаговик и есть. Покрутите за вал. У шагового будут шаги пальцами ощущаться. Вам не понятна программная или аппаратная часть управления шаговым двигателем? И назовите его модель.

aljoshka
Offline
Зарегистрирован: 03.03.2014

ось крутится свободно, нет увеличения сопротивления при замыкании контактов(как у шаговиков), даташит нигде не нашёл, мутант какой-то попался.. ;) 4 PIN...

MADE IN JAPAN NO. 020-024-0045-319-SS

24 VOLTS, 19 OHM RESISTANCE, 50129-2, Applied Motion Products, INC.

http://gridchoice.com/catalog/used-actuator-motor-501292-p-5197.html

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

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

Valodya
Offline
Зарегистрирован: 09.04.2014

Здравствуйте ребята,, уже третий день я стараюсь собрат инкубатор  под управлением Ардуино Уно,но с программированием не очень справляюсь,, и увидел ваш проект,,,   помогите  пожалусто собират,  я применяю ,,Ардуино уно р3,,   ,,Arduino LCD Keypad Shield  ,,  и ,, ДХТ-11,,    датчик   ,,  подскажите пожалуйста коды для ардуино

Valodya
Offline
Зарегистрирован: 09.04.2014

Здравствуйте ребята,, уже третий день я стараюсь собрат инкубатор  под управлением Ардуино Уно,но с программированием не очень справляюсь,, и увидел ваш проект,,,   помогите  пожалусто собират,  я применяю ,,Ардуино уно р3,,   ,,Arduino LCD Keypad Shield  ,,  и ,, ДХТ-11,,    датчик   ,,  подскажите пожалуйста коды для ардуино

aljoshka
Offline
Зарегистрирован: 03.03.2014

коды есть в теме... дхт11 только для влажности годится изза погрешности температуры в 2 градуса... дхт 22 или DS18B20 лучьше.. ;) 

Valodya
Offline
Зарегистрирован: 09.04.2014

там   несколько  коди   ест   катори   из   них лучьше?

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Код ещё сырой. В готовый инкубатор его наверное никто не внедрял. Может Вам будет проще купить готовый прибор?

Vasya_38
Offline
Зарегистрирован: 10.05.2014

Хочу купить у вас это устройство, сколько стоит?

Напишите мне на почту.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Это кому вопрос?

Vasya_38
Offline
Зарегистрирован: 10.05.2014

Хочу купить у вас это устройство (инкубатор).

Какая цена?

Напишите мне ответ на почтовый ящик!

Вопрос ко всем на этом форуме, кто может сделать это устройство .

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

http://www.youtube.com/watch?v=PzV-B6Z6D9I

Вот немного видео моего проекта инкубатора с ПИД регуляторами. Почтовый ящик не видно отсюда. Цену трудно назвать без точного техзадания. Если есть интерес, пишите в комментариях на канале, обсудим. Не стот тему засорять.

zlod
Offline
Зарегистрирован: 16.05.2014

свой инкубатор сделал из новосибирской наседки, у которой сломался регулятор температуры. для измерения температуры/влажности использовал 2 DHT22. Один в центре, второй в углу. В центре на крышке установлен вертилятор 12 см от компьютера. Когда края инкубатора остывают на 0.2 град по отношению к середине (для этого и 2 датчика), вентилятор включается вверх (не несколько секунд), обдувая нагреватели. Нагреватели остались от наседки (пластины с резисторами). к одной из пластин приклеен DHT11. Поддержание температуры в инкубаторе достигается поддержанием температуры на нагревателе в определенном диапазоне. Эксперементальным путем пришел к выводу, что так температура держится стабильнее (видимо по причине инертности датчиков в инкубаторе). Температура нагревателя подстраивается, в зависимости от динамики температуры в инкубаторе. ограничения DHT11 - не видит температуру выше 60, и нагреватель выше греть не получается.  Контроллер поддерживает разную температуру в разные дни инкубации (по какой-то дикой таблице с просторов интернета), равно как и смотрит переворачивать ли яйца. Для этого он отслеживает время с начала инкубации. На случай отключения электричества, каждый час записывает время в пром. так-же записывает температуру, которую надо поддерживать на нагревателе. Поворот яиц сделал анологично стандартной в наседке (у меня его не было). Используется двигатель от микроволновки, на шкив которого прикручена Г образная железка. к ней прямая тяга, которая двигает решетку туда - сюда. поддержание влажности не делал, на тот момент не было нужных деталей а время поджимало. В этом году собираюсь сделать инкубатор яиц на 500, там хочу попробовать поддерживать влажность и автоматическое проветривание. Для чтения с DHT11,DHT22 и для работы с дисплеем 1602 использовал готовые библиотеки, опять-же с просторов интернета.

zlod
Offline
Зарегистрирован: 16.05.2014

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

aljoshka
Offline
Зарегистрирован: 03.03.2014

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

georgij
Offline
Зарегистрирован: 05.03.2012

Дорогой Zlod Не хотите ли поделится скетчем а то инкубатор нужен сейчас а времени нет самому огород городить потому как я понимаю сколько на это нужно времени и сил.

ecs23
Offline
Зарегистрирован: 23.02.2015

Лучше всего использовать психрометрический способ измерения влажности 100% измерение

Sergik112
Offline
Зарегистрирован: 08.07.2015

а есть уже готовый код доделаный?

ecs23
Offline
Зарегистрирован: 23.02.2015

Привет всем я свой доделал полность в автоматическом режиме 21 день

XAM
Offline
Зарегистрирован: 01.03.2014

Ну а кодик выложи глянуть

Sergik112
Offline
Зарегистрирован: 08.07.2015

Можете скинуть скетч?Sergik112@bigmir.net

ВН
Offline
Зарегистрирован: 25.02.2016

aljoshka пишет:

ось крутится свободно, нет увеличения сопротивления при замыкании контактов(как у шаговиков), даташит нигде не нашёл, мутант какой-то попался.. ;) 4 PIN...

MADE IN JAPAN NO. 020-024-0045-319-SS

24 VOLTS, 19 OHM RESISTANCE, 50129-2, Applied Motion Products, INC.

http://gridchoice.com/catalog/used-actuator-motor-501292-p-5197.html

типичный шаговик от стрых флоппи дисков, были такие диски в виде больших конвертов в 80-х

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

http://ru.aliexpress.com/item/New-Dual-H-Bridge-DC-Stepper-Motor-Drive-C...

ecs23
Offline
Зарегистрирован: 23.02.2015
#include "DHT.h"
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
#include <PID_v1.h>

#include <EEPROM.h>
DHT _dht1(2, DHT22);

RTC_DS1307  _RTC1;
DateTime  _tRTC1;

LiquidCrystal_I2C _lcd1(0x27, 20, 4);
int _dispTempLength1 = 0;
boolean _isNeedClearDisp1;

struct UB_137728376
{
  bool ubo_98194804 = 0;
  int ubo_163329687 = 0;
  int _gtv1 = 0;
};
UB_137728376 UB_137728376_Instance1;
UB_137728376 UB_137728376_Instance2;
UB_137728376 UB_137728376_Instance3;
UB_137728376 UB_137728376_Instance4;
bool UB_137728376_ubi_123350138 = 0;
int UB_137728376_ubi_192936444 = 0;
bool UB_137728376_ubi_49121227 = 0;
bool UB_137728376_ubi_126099155 = 0;
struct UB_139136934
{
  int ubo_54273604 = 0;
  bool _gtv1 = 0;
  bool _gtv2 = 0;
  bool _gtv3 = 0;
  bool _count1I = 0;
  int _count1P = 0;
  bool _gen1I = 0;
  bool _gen1O = 0;
  unsigned long _gen1P = 0UL;
};
UB_139136934 UB_139136934_Instance1;
bool UB_139136934_ubi_122636397 = 0;
bool PID_MODE_214825553_1;
int Kp_214825553_1;
int Ki_214825553_1;
int Kd_214825553_1;
float SP_214825553_1;
float In_214825553_1;
int Out_214825553_1;
double Input_214825553_1;
double Output_214825553_1;
double Setpoint_214825553_1;
PID myPID_214825553_1(&Input_214825553_1, &Output_214825553_1, &Setpoint_214825553_1,   Ki_214825553_1  ,   Kp_214825553_1  ,   Kd_214825553_1  , 0);
unsigned long _hasNumberChangeInTemp = 0;
int _gtv2 = 22;
float _gtv4;
float _gtv6;
bool _gtv7 = 0;
bool _gtv9 = 0;
bool _gtv13 = 0;
bool _gtv14 = 0;
bool _gtv15 = 0;
bool _gtv16 = 0;
bool _gtv17 = 0;
bool _gtv18 = 0;
bool _gtv19 = 0;
bool _gtv20 = 0;
bool _gtv21 = 0;
bool _gtv24 = 0;
bool _gtv25 = 0;
bool _gtv26 = 0;
bool _gtv35 = 0;
bool _gtv37 = 0;
bool _gtv40 = 0;
bool _gtv41 = 0;
bool _gtv42 = 0;
bool _gtv43 = 0;
float _gtv44 = 37.9;
float _gtv45 = 37.6;
float _gtv46 = 67;
bool _gtv47 = 0;
bool _gtv48 = 0;
bool _gtv49 = 1;
bool _gtv50 = 0;
float _gtv51 = 37.6;
float _gtv52 = 55;
float _gtv53 = 72;
float _gtv54 = 37.4;
float _gtv55 = 70;
float _gtv56 = 0.1;
float _gtv57 = 0.1;
bool _gtv59 = 0;
bool _gtv60 = 0;
bool _gtv61 = 0;
bool _gtv62 = 0;
int _gtv63;
bool _gtv64 = 0;
bool _gtv65 = 0;
bool _gtv66 = 0;
bool _mkb2C1xP1 = 0;
bool _mkb2C1xP2 = 0;
bool _mkb2C1xP3 = 0;
bool _mkb2C1xP4 = 0;
bool _bounse3S = 0;
bool _bounse3O = 0;
unsigned long _bounse3P = 0UL;
bool _RTCST_Ost2 = 0;
bool _count1I = 0;
int _count1P = 0;
bool _RTCST_Ost1 = 0;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
int _disp2oldLength = 0;
int _disp26oldLength = 0;
unsigned long _dht1Tti = 0UL;
float _dht1t = 0.00;
float _dht1h = 0.00;
int _disp27oldLength = 0;
String _stou3;
int _disp1oldLength = 0;
String _stou1;
int _disp3oldLength = 0;
int _disp9oldLength = 0;
int _disp10oldLength = 0;
int _disp28oldLength = 0;
int _disp29oldLength = 0;
int _disp30oldLength = 0;
int _disp31oldLength = 0;
int _disp33oldLength = 0;
int _disp23oldLength = 0;
int _disp14oldLength = 0;
int _disp15oldLength = 0;
int _disp16oldLength = 0;
int _disp24oldLength = 0;
int _disp34oldLength = 0;
int _disp35oldLength = 0;
int _disp36oldLength = 0;
int _disp37oldLength = 0;
int _disp40oldLength = 0;
int _disp17oldLength = 0;
int _disp18oldLength = 0;
int _disp19oldLength = 0;
int _disp41oldLength = 0;
int _disp42oldLength = 0;
int _disp43oldLength = 0;
int _disp44oldLength = 0;
int _disp45oldLength = 0;
int _disp46oldLength = 0;
int _disp20oldLength = 0;
int _disp21oldLength = 0;
int _disp22oldLength = 0;
int _disp47oldLength = 0;
int _disp48oldLength = 0;
int _disp49oldLength = 0;
int _disp50oldLength = 0;
int _disp51oldLength = 0;
bool _dms1Q0 = 0;
bool _dms1Q1 = 0;
bool _dms1Q2 = 0;
bool _dms1Q3 = 0;
bool _dms1Q4 = 0;
bool _dms1Q5 = 0;
bool _dms1Q6 = 0;
bool _dms1Q7 = 0;
bool _count2I = 0;
int _count2P = 0;
bool _bounse1S = 0;
bool _bounse1O = 0;
unsigned long _bounse1P = 0UL;
bool _trgt1 = 0;
bool _trgt1I = 0;
bool _trgt2 = 0;
bool _trgt2I = 0;
bool _trgt3 = 0;
bool _trgt3I = 0;
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0UL;
bool _trgt4 = 0;
bool _trgt4I = 0;
bool _tim3I = 0;
bool _tim3O = 0;
unsigned long _tim3P = 0UL;
int _disp52oldLength = 0;
int _disp32oldLength = 0;
int _disp38oldLength = 0;
int _disp39oldLength = 0;
bool _trgt5 = 0;
bool _trgt5I = 0;
int _disp13oldLength = 0;
bool _trgt6 = 0;
bool _trgt6I = 0;
int _disp4oldLength = 0;
bool _trgt7 = 0;
bool _trgt7I = 0;
int _disp57oldLength = 0;
bool _trgt8 = 0;
bool _trgt8I = 0;
int _disp58oldLength = 0;
bool _SEEPR9OSN = 0;
bool _SEEPR1OSN = 0;
bool _SEEPR2OSN = 0;
bool _SEEPR3OSN = 0;
bool _SEEPR4OSN = 0;
bool _SEEPR5OSN = 0;
bool _SEEPR6OSN = 0;
bool _SEEPR7OSN = 0;
bool _RTCST_Ost3 = 0;
bool _RTCST_Ost4 = 0;
bool _gen4I = 0;
bool _gen4O = 0;
unsigned long _gen4P = 0UL;
bool _gen6I = 0;
bool _gen6O = 0;
unsigned long _gen6P = 0UL;
bool _SEEPR10OSN = 0;
bool _gen8I = 0;
bool _gen8O = 0;
unsigned long _gen8P = 0UL;
bool _gen9I = 0;
bool _gen9O = 0;
unsigned long _gen9P = 0UL;
bool _SEEPR11OSN = 0;
bool _gen10I = 0;
bool _gen10O = 0;
unsigned long _gen10P = 0UL;
bool _gen11I = 0;
bool _gen11O = 0;
unsigned long _gen11P = 0UL;
bool _SEEPR12OSN = 0;
bool _gen12I = 0;
bool _gen12O = 0;
unsigned long _gen12P = 0UL;
bool _gen13I = 0;
bool _gen13O = 0;
unsigned long _gen13P = 0UL;
bool _SEEPR13OSN = 0;
bool _gen5I = 0;
bool _gen5O = 0;
unsigned long _gen5P = 0UL;
int _disp53oldLength = 0;
int _disp5oldLength = 0;
int _stou9;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
int _disp55oldLength = 0;
bool _count4I = 0;
int _count4P = 0;
bool _gen7I = 0;
bool _gen7O = 0;
unsigned long _gen7P = 0UL;
unsigned long _stou11 = 0UL;
bool _count3I = 0;
unsigned long _count3P = 0UL;
unsigned long _stou10 = 0UL;
bool _changeNumber1_Out = 0;
unsigned long _changeNumber1_OLV;
bool _SEEPR8OSN = 0;
int _disp56oldLength = 0;
bool _gen2I = 0;
bool _gen2O = 0;
unsigned long _gen2P = 0UL;
int _disp54oldLength = 0;
int _disp6oldLength = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
int _disp7oldLength = 0;
int _disp8oldLength = 0;
bool _gen3I = 0;
bool _gen3O = 0;
unsigned long _gen3P = 0UL;
int _disp11oldLength = 0;
int _disp12oldLength = 0;
bool _stou2 = 0;
bool _stou4 = 0;
bool _stou5 = 0;
bool _stou6 = 0;
bool _stou7 = 0;
bool _stou8 = 0;
int _SCT3_DLDIV = 0;
bool _SCT3_DLOSN = 0;
unsigned long _SCT3_DLST = 0UL;
bool _SCT3_DLIDM = 0;
int _disp25oldLength = 0;
int _disp59oldLength = 0;
int _disp60oldLength = 0;
bool _bounseInputD22S = 0;
bool _bounseInputD22O = 0;
unsigned long _bounseInputD22P = 0UL;
void setup()
{
  Wire.begin();
  _RTC1.begin();
  Serial.begin(115200);
  pinMode(22, INPUT);
  pinMode(26, INPUT);
  pinMode(24, INPUT);
  pinMode(28, INPUT);
  pinMode(13, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(43, OUTPUT);
  pinMode(41, OUTPUT);

  _lcd1.init();
  _lcd1.backlight();
  _bounseInputD22O =  digitalRead(22);
  pinMode(3, INPUT);
  pinMode(53, OUTPUT);
  TCCR2A = 0;
  TCCR2B = 0 << CS22 | 1 << CS21 | 0 << CS20;
  TIMSK2 = 1 << TOIE2;
  TCNT2 = 210;
  attachInterrupt(1, _SCT3positiveCoutFunction, RISING );
  _dht1.begin();
  pinMode(16, INPUT);
  digitalWrite(16, HIGH);
  pinMode(17, INPUT);
  digitalWrite(17, HIGH);
  pinMode(18, INPUT);
  digitalWrite(18, HIGH);
  pinMode(19, INPUT);
  digitalWrite(19, HIGH);
  pinMode(15, OUTPUT);
  digitalWrite(15, HIGH);
  _stou11 = millis();
  _stou10 = millis();


}
void loop()
{ _tRTC1 = _RTC1.now();
  if (_isTimer(_dht1Tti, 2000)) {
    _dht1Tti = millis();
    float tempDht2;
    tempDht2 = _dht1.readTemperature();
    if (!(isnan(tempDht2))) {
      _dht1t = tempDht2;
    }
    tempDht2 = _dht1.readHumidity();
    if (!(isnan(tempDht2))) {
      _dht1h = tempDht2;
    }
  } if (_isNeedClearDisp1) {
    _lcd1.clear();
    _isNeedClearDisp1 = 0;
  }

  bool  _bounceInputTmpD22 =  (digitalRead (22));

  if (_bounseInputD22S)
  {
    if (millis() >= (_bounseInputD22P + 40))
    {
      _bounseInputD22O = _bounceInputTmpD22;
      _bounseInputD22S = 0;
    }
  }
  else
  {
    if (_bounceInputTmpD22 != _bounseInputD22O )
    {
      _bounseInputD22S = 1;
      _bounseInputD22P = millis();
    }
  }



  digitalWrite(15, 0);
  _mkb2C1xP1 = ! (digitalRead(16));
  _mkb2C1xP2 = ! (digitalRead(17));
  _mkb2C1xP3 = ! (digitalRead(18));
  _mkb2C1xP4 = ! (digitalRead(19));
  digitalWrite(15, 1);
  bool   _bounceTmpD3 = _mkb2C1xP2;

  if (_bounse3S)
  {
    if (millis() >= (_bounse3P + 40))
    {
      _bounse3O =  _bounceTmpD3;
      _bounse3S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD3 != _bounse3O )
    {
      _bounse3S = 1;
      _bounse3P = millis();
    }
  }
  _gtv40 = _mkb2C1xP1;
  _gtv41 = _bounse3O;
  _gtv9 = ( (_gtv40) && (!(_gtv13)) );
  digitalWrite(13, _gtv41);
  _gtv42 = _mkb2C1xP3;
  _gtv43 = _mkb2C1xP4;
  _gtv13 = (21) >= (_gtv2);
  if (_gtv9)
  { if (!(_RTCST_Ost2))
    {
      _RTCST_Ost2 = 1;
      _tRTC1 = _RTC1.now();
      DateTime _tempTime((_tRTC1.year()), (_tRTC1.month()), (1), (0), (0), (0));
      _RTC1.adjust(_tempTime);
      _tRTC1 = _RTC1.now();
    }
  }
  else
  {
    _RTCST_Ost2 = 0;
  }

  if (( (_gtv41) && (_gtv13) ))
  {
    if (! _count1I)
    {
      _count1P = _count1P + 1;
      _count1I = 1;
    }
  }
  else
  {
    _count1I = 0;
  }
  if (( (_tim1O) || (_gtv37) )) _count1P = 0;
  if (( (_gtv41) && (_gtv13) ))
  {
    if (_tim1I) {
      if (_isTimer(_tim1P, 6000)) {
        _tim1O = 1;
      }
    } else {
      _tim1I = 1;
      _tim1P = millis();
    }
  } else {
    _tim1O = 0;
    _tim1I = 0;
  }
  if ( _count1P  >=  5)
  { if (!(_RTCST_Ost1))
    {
      _RTCST_Ost1 = 1;
      _tRTC1 = _RTC1.now();
      DateTime _tempTime((_tRTC1.year()), (_tRTC1.month()), (22), (22), (22), (22));
      _RTC1.adjust(_tempTime);
      _tRTC1 = _RTC1.now();
    }
  }
  else
  {
    _RTCST_Ost1 = 0;
  }
  if ((_count1P) < (1)) {
    _dispTempLength1 = (((String(_count1P)))).length();
    if (_disp2oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp2oldLength = _dispTempLength1;
    _lcd1.setCursor(18, 0);
    _lcd1.print(((String(_count1P))));
  } else {
    if (_disp2oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp2oldLength = 0;
    }
  }
  _gtv37 =  _count1P  >=  5;
  if ((21) < (_gtv2)) {
    _dispTempLength1 = (String("Esli Vse OK to START")).length();
    if (_disp26oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp26oldLength = _dispTempLength1;
    _lcd1.setCursor(int((20 - _dispTempLength1) / 2), 2);
    _lcd1.print(String("Esli Vse OK to START"));
  } else {
    if (_disp26oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp26oldLength = 0;
    }
  }
  if (1) {
    _dispTempLength1 = ((((String("T:")) + (( _floatToStringWitRaz(_gtv4, 2))) + (String("C H:")) + (( _floatToStringWitRaz(_gtv6, 2))) + (String("%"))))).length();
    if (_disp27oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp27oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 0);
    _lcd1.print((((String("T:")) + (( _floatToStringWitRaz(_gtv4, 2))) + (String("C H:")) + (( _floatToStringWitRaz(_gtv6, 2))) + (String("%")))));
  } else {
    if (_disp27oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp27oldLength = 0;
    }
  }
  _gtv4 = _dht1t;
  _gtv6 = _dht1h;
  if (1) {
    if (!(( ((((String("T:")) + (( _floatToStringWitRaz(_gtv4, 2))) + (String("C H:")) + (( _floatToStringWitRaz(_gtv6, 2))) + (String("%")))) + (String(" ")) + ((String(_gtv2))) + (String(" Deni")))) == (_stou3))) {
      Serial.println(((((String("T:")) + (( _floatToStringWitRaz(_gtv4, 2))) + (String("C H:")) + (( _floatToStringWitRaz(_gtv6, 2))) + (String("%")))) + (String(" ")) + ((String(_gtv2))) + (String(" Deni"))));
    }
  } _stou3 = ((((String("T:")) + (( _floatToStringWitRaz(_gtv4, 2))) + (String("C H:")) + (( _floatToStringWitRaz(_gtv6, 2))) + (String("%")))) + (String(" ")) + ((String(_gtv2))) + (String(" Deni")));
  if (_gtv13) {
    _dispTempLength1 = (((String(_gtv2)))).length();
    if (_disp1oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp1oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 3);
    _lcd1.print(((String(_gtv2))));
  } else {
    if (_disp1oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp1oldLength = 0;
    }
  }
  _gtv2 = (_tRTC1.day());
  if (1) {
    if (!(( (((String((_tRTC1.hour())))) + (String(" :")) + ((String((_tRTC1.minute())))) + (String(":")) + ((String((_tRTC1.day())))))) == (_stou1))) {
      Serial.println((((String((_tRTC1.hour())))) + (String(" :")) + ((String((_tRTC1.minute())))) + (String(":")) + ((String((_tRTC1.day()))))));
    }
  } _stou1 = (((String((_tRTC1.hour())))) + (String(" :")) + ((String((_tRTC1.minute())))) + (String(":")) + ((String((_tRTC1.day())))));
  PID_MODE_214825553_1 = _gtv17;
  Kp_214825553_1 = (EEPROMReadInt(34));
  Ki_214825553_1 = (EEPROMReadInt(36));
  Kd_214825553_1 = (EEPROMReadInt(38));
  SP_214825553_1 = (EEPROMReadFloat(0));
  In_214825553_1 = _gtv4;
  Setpoint_214825553_1 = SP_214825553_1;
  Input_214825553_1 = In_214825553_1;
  myPID_214825553_1.SetTunings(Kp_214825553_1, Ki_214825553_1, Kd_214825553_1);
  myPID_214825553_1.SetMode(int(PID_MODE_214825553_1));
  myPID_214825553_1.Compute();
  Out_214825553_1 = Output_214825553_1;

  _gtv17 = ( ((1) <= (_gtv2)) && ((3) >= (_gtv2)) );
  if (( ((1) <= (_gtv2)) && ((3) >= (_gtv2)) )) {
    _dispTempLength1 = (String("1-3")).length();
    if (_disp3oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp3oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 2);
    _lcd1.print(String("1-3"));
  } else {
    if (_disp3oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp3oldLength = 0;
    }
  }
  if (_gtv17) {
    _dispTempLength1 = ((( _floatToStringWitRaz((EEPROMReadFloat(0)), 2)))).length();
    if (_disp10oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp10oldLength = _dispTempLength1;
    _lcd1.setCursor(2, 1);
    _lcd1.print((( _floatToStringWitRaz((EEPROMReadFloat(0)), 2))));
  } else {
    if (_disp10oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp10oldLength = 0;
    }
  }
  if (( ((_gtv6) <= ((EEPROMReadFloat(4)))) && (_gtv17) )) {
    _dispTempLength1 = (String("uvl")).length();
    if (_disp9oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp9oldLength = _dispTempLength1;
    _lcd1.setCursor(16, 3);
    _lcd1.print(String("uvl"));
  } else {
    if (_disp9oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp9oldLength = 0;
    }
  }
  if (_gtv17) {
    _dispTempLength1 = (String("T:")).length();
    if (_disp28oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp28oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 1);
    _lcd1.print(String("T:"));
  } else {
    if (_disp28oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp28oldLength = 0;
    }
  }
  _gtv63 = Out_214825553_1;
  if (_gtv17) {
    _gtv16 = ( ((_gtv6) <= ((EEPROMReadFloat(4)))) && (_gtv17) );
  }
  if (_gtv17) {
    _dispTempLength1 = (String("C")).length();
    if (_disp31oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp31oldLength = _dispTempLength1;
    _lcd1.setCursor(7, 1);
    _lcd1.print(String("C"));
  } else {
    if (_disp31oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp31oldLength = 0;
    }
  }
  if (_gtv17) {
    _dispTempLength1 = ((( _floatToStringWitRaz((EEPROMReadFloat(4)), 2)))).length();
    if (_disp29oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp29oldLength = _dispTempLength1;
    _lcd1.setCursor(11, 1);
    _lcd1.print((( _floatToStringWitRaz((EEPROMReadFloat(4)), 2))));
  } else {
    if (_disp29oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp29oldLength = 0;
    }
  }
  if (_gtv17) {
    _dispTempLength1 = (String("H:")).length();
    if (_disp30oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp30oldLength = _dispTempLength1;
    _lcd1.setCursor(9, 1);
    _lcd1.print(String("H:"));
  } else {
    if (_disp30oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp30oldLength = 0;
    }
  }
  if (_gtv17) {
    _dispTempLength1 = (String("%")).length();
    if (_disp33oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp33oldLength = _dispTempLength1;
    _lcd1.setCursor(16, 1);
    _lcd1.print(String("%"));
  } else {
    if (_disp33oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp33oldLength = 0;
    }
  }
  if (( ((_gtv4) <= ((EEPROMReadFloat(8)))) && (_gtv18) )) {
    _dispTempLength1 = (String("podo")).length();
    if (_disp14oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp14oldLength = _dispTempLength1;
    _lcd1.setCursor(11, 3);
    _lcd1.print(String("podo"));
  } else {
    if (_disp14oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp14oldLength = 0;
    }
  }
  if (_gtv18) {
    _gtv7 = ( ((_gtv4) <= ((EEPROMReadFloat(8)))) && (_gtv18) );
  }
  _gtv18 = ( ((4) <= (_gtv2)) && ((13) >= (_gtv2)) );
  if (_gtv18) {
    _dispTempLength1 = ((( _floatToStringWitRaz((EEPROMReadFloat(8)), 2)))).length();
    if (_disp16oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp16oldLength = _dispTempLength1;
    _lcd1.setCursor(2, 1);
    _lcd1.print((( _floatToStringWitRaz((EEPROMReadFloat(8)), 2))));
  } else {
    if (_disp16oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp16oldLength = 0;
    }
  }
  if (( ((4) <= (_gtv2)) && ((13) >= (_gtv2)) )) {
    _dispTempLength1 = (String("4-13")).length();
    if (_disp23oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp23oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 2);
    _lcd1.print(String("4-13"));
  } else {
    if (_disp23oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp23oldLength = 0;
    }
  }
  if (_gtv18) {
    _dispTempLength1 = (String("T:")).length();
    if (_disp36oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp36oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 1);
    _lcd1.print(String("T:"));
  } else {
    if (_disp36oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp36oldLength = 0;
    }
  }
  if (_gtv18) {
    _dispTempLength1 = (String("C")).length();
    if (_disp37oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp37oldLength = _dispTempLength1;
    _lcd1.setCursor(7, 1);
    _lcd1.print(String("C"));
  } else {
    if (_disp37oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp37oldLength = 0;
    }
  }
  if (( ((_gtv6) <= ((EEPROMReadFloat(12)))) && (_gtv18) )) {
    _dispTempLength1 = (String("uvl")).length();
    if (_disp15oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp15oldLength = _dispTempLength1;
    _lcd1.setCursor(16, 3);
    _lcd1.print(String("uvl"));
  } else {
    if (_disp15oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp15oldLength = 0;
    }
  }
  if (_gtv18) {
    _gtv16 = ( ((_gtv6) <= ((EEPROMReadFloat(12)))) && (_gtv18) );
  }
  if (_gtv18) {
    _dispTempLength1 = ((( _floatToStringWitRaz((EEPROMReadFloat(12)), 2)))).length();
    if (_disp24oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp24oldLength = _dispTempLength1;
    _lcd1.setCursor(11, 1);
    _lcd1.print((( _floatToStringWitRaz((EEPROMReadFloat(12)), 2))));
  } else {
    if (_disp24oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp24oldLength = 0;
    }
  }
  if (_gtv18) {
    _dispTempLength1 = (String("H:")).length();
    if (_disp34oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp34oldLength = _dispTempLength1;
    _lcd1.setCursor(9, 1);
    _lcd1.print(String("H:"));
  } else {
    if (_disp34oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp34oldLength = 0;
    }
  }
  if (_gtv18) {
    _dispTempLength1 = (String("%")).length();
    if (_disp35oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp35oldLength = _dispTempLength1;
    _lcd1.setCursor(16, 1);
    _lcd1.print(String("%"));
  } else {
    if (_disp35oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp35oldLength = 0;
    }
  }
  if (( ((_gtv4) <= ((EEPROMReadFloat(16)))) && (_gtv19) )) {
    _dispTempLength1 = (String("podo")).length();
    if (_disp17oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp17oldLength = _dispTempLength1;
    _lcd1.setCursor(11, 3);
    _lcd1.print(String("podo"));
  } else {
    if (_disp17oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp17oldLength = 0;
    }
  }
  _gtv19 = ( ((14) <= (_gtv2)) && ((17) >= (_gtv2)) );
  if (( ((14) <= (_gtv2)) && ((17) >= (_gtv2)) )) {
    _dispTempLength1 = (String("14-17")).length();
    if (_disp40oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp40oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 2);
    _lcd1.print(String("14-17"));
  } else {
    if (_disp40oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp40oldLength = 0;
    }
  }
  if (_gtv19) {
    _gtv7 = ( ((_gtv4) <= ((EEPROMReadFloat(16)))) && (_gtv19) );
  }
  if (_gtv19) {
    _dispTempLength1 = ((( _floatToStringWitRaz((EEPROMReadFloat(16)), 2)))).length();
    if (_disp19oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp19oldLength = _dispTempLength1;
    _lcd1.setCursor(2, 1);
    _lcd1.print((( _floatToStringWitRaz((EEPROMReadFloat(16)), 2))));
  } else {
    if (_disp19oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp19oldLength = 0;
    }
  }
  if (_gtv19) {
    _dispTempLength1 = (String("T:")).length();
    if (_disp41oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp41oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 1);
    _lcd1.print(String("T:"));
  } else {
    if (_disp41oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp41oldLength = 0;
    }
  }
  if (_gtv19) {
    _dispTempLength1 = (String("C")).length();
    if (_disp42oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp42oldLength = _dispTempLength1;
    _lcd1.setCursor(7, 1);
    _lcd1.print(String("C"));
  } else {
    if (_disp42oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp42oldLength = 0;
    }
  }
  if (( ((_gtv6) <= ((EEPROMReadFloat(20)))) && (_gtv19) )) {
    _dispTempLength1 = (String("uvl")).length();
    if (_disp18oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp18oldLength = _dispTempLength1;
    _lcd1.setCursor(16, 3);
    _lcd1.print(String("uvl"));
  } else {
    if (_disp18oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp18oldLength = 0;
    }
  }
  if (_gtv19) {
    _gtv16 = ( ((_gtv6) <= ((EEPROMReadFloat(20)))) && (_gtv19) );
  }
  if (_gtv19) {
    _dispTempLength1 = ((( _floatToStringWitRaz((EEPROMReadFloat(20)), 2)))).length();
    if (_disp43oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp43oldLength = _dispTempLength1;
    _lcd1.setCursor(11, 1);
    _lcd1.print((( _floatToStringWitRaz((EEPROMReadFloat(20)), 2))));
  } else {
    if (_disp43oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp43oldLength = 0;
    }
  }
  if (_gtv19) {
    _dispTempLength1 = (String("H:")).length();
    if (_disp44oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp44oldLength = _dispTempLength1;
    _lcd1.setCursor(9, 1);
    _lcd1.print(String("H:"));
  } else {
    if (_disp44oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp44oldLength = 0;
    }
  }
  if (_gtv19) {
    _dispTempLength1 = (String("%")).length();
    if (_disp45oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp45oldLength = _dispTempLength1;
    _lcd1.setCursor(16, 1);
    _lcd1.print(String("%"));
  } else {
    if (_disp45oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp45oldLength = 0;
    }
  }
  _gtv20 = ( ((18) <= (_gtv2)) && ((21) >= (_gtv2)) );
  if (( ((_gtv4) <= ((EEPROMReadFloat(24)))) && (_gtv20) )) {
    _dispTempLength1 = (String("podo")).length();
    if (_disp20oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp20oldLength = _dispTempLength1;
    _lcd1.setCursor(11, 3);
    _lcd1.print(String("podo"));
  } else {
    if (_disp20oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp20oldLength = 0;
    }
  }
  if (( ((18) <= (_gtv2)) && ((21) >= (_gtv2)) )) {
    _dispTempLength1 = (String("18-21")).length();
    if (_disp46oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp46oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 2);
    _lcd1.print(String("18-21"));
  } else {
    if (_disp46oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp46oldLength = 0;
    }
  }
  if (_gtv20) {
    _gtv7 = ( ((_gtv4) <= ((EEPROMReadFloat(24)))) && (_gtv20) );
  }
  if (_gtv20) {
    _dispTempLength1 = ((( _floatToStringWitRaz((EEPROMReadFloat(24)), 2)))).length();
    if (_disp22oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp22oldLength = _dispTempLength1;
    _lcd1.setCursor(2, 1);
    _lcd1.print((( _floatToStringWitRaz((EEPROMReadFloat(24)), 2))));
  } else {
    if (_disp22oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp22oldLength = 0;
    }
  }
  if (_gtv20) {
    _dispTempLength1 = (String("T:")).length();
    if (_disp47oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp47oldLength = _dispTempLength1;
    _lcd1.setCursor(0, 1);
    _lcd1.print(String("T:"));
  } else {
    if (_disp47oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp47oldLength = 0;
    }
  }
  if (( ((_gtv6) <= ((EEPROMReadFloat(28)))) && (_gtv20) )) {
    _dispTempLength1 = (String("uvl")).length();
    if (_disp21oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp21oldLength = _dispTempLength1;
    _lcd1.setCursor(16, 3);
    _lcd1.print(String("uvl"));
  } else {
    if (_disp21oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp21oldLength = 0;
    }
  }
  if (_gtv20) {
    _dispTempLength1 = (String("C")).length();
    if (_disp48oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp48oldLength = _dispTempLength1;
    _lcd1.setCursor(7, 1);
    _lcd1.print(String("C"));
  } else {
    if (_disp48oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp48oldLength = 0;
    }
  }
  if (_gtv20) {
    _gtv16 = ( ((_gtv6) <= ((EEPROMReadFloat(28)))) && (_gtv20) );
  }
  if (_gtv20) {
    _dispTempLength1 = ((( _floatToStringWitRaz((EEPROMReadFloat(28)), 2)))).length();
    if (_disp49oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp49oldLength = _dispTempLength1;
    _lcd1.setCursor(11, 1);
    _lcd1.print((( _floatToStringWitRaz((EEPROMReadFloat(28)), 2))));
  } else {
    if (_disp49oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp49oldLength = 0;
    }
  }
  if (_gtv20) {
    _dispTempLength1 = (String("H:")).length();
    if (_disp50oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp50oldLength = _dispTempLength1;
    _lcd1.setCursor(9, 1);
    _lcd1.print(String("H:"));
  } else {
    if (_disp50oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp50oldLength = 0;
    }
  }
  if (_gtv20) {
    _dispTempLength1 = (String("%")).length();
    if (_disp51oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp51oldLength = _dispTempLength1;
    _lcd1.setCursor(16, 1);
    _lcd1.print(String("%"));
  } else {
    if (_disp51oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp51oldLength = 0;
    }
  }
  bool   _bounceTmpD1 = _gtv40;

  if (_bounse1S)
  {
    if (millis() >= (_bounse1P + 40))
    {
      _bounse1O =  _bounceTmpD1;
      _bounse1S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD1 != _bounse1O )
    {
      _bounse1S = 1;
      _bounse1P = millis();
    }
  }
  bool  _tmp1 = _dms1Q0;
  if (_tmp1)  {
    if (! _trgt1I) _trgt1 = ! _trgt1;
  }
  _trgt1I = _tmp1;
  bool  _tmp5 = _dms1Q4;
  if (_tmp5)  {
    if (! _trgt5I) _trgt5 = ! _trgt5;
  }
  _trgt5I = _tmp5;
  if ((_count2P == 0)) {
    _dms1Q0 = ( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) );
  } else {
    _dms1Q0 = 0;
  }
  if ((_count2P == 1)) {
    _dms1Q1 = ( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) );
  } else {
    _dms1Q1 = 0;
  }
  if ((_count2P == 2)) {
    _dms1Q2 = ( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) );
  } else {
    _dms1Q2 = 0;
  }
  if ((_count2P == 3)) {
    _dms1Q3 = ( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) );
  } else {
    _dms1Q3 = 0;
  }
  if ((_count2P == 4)) {
    _dms1Q4 = ( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) );
  } else {
    _dms1Q4 = 0;
  }
  if ((_count2P == 5)) {
    _dms1Q5 = ( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) );
  } else {
    _dms1Q5 = 0;
  }
  if ((_count2P == 6)) {
    _dms1Q6 = ( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) );
  } else {
    _dms1Q6 = 0;
  }
  if ((_count2P == 7)) {
    _dms1Q7 = ( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) );
  } else {
    _dms1Q7 = 0;
  }
  if (_gtv13)
  {
    if (_tim2I) {
      if (_isTimer(_tim2P, 5000)) {
        _tim2O = 1;
      }
    } else {
      _tim2I = 1;
      _tim2P = millis();
    }
  } else {
    _tim2O = 0;
    _tim2I = 0;
  }
  bool  _tmp2 = _dms1Q1;
  if (_tmp2)  {
    if (! _trgt2I) _trgt2 = ! _trgt2;
  }
  _trgt2I = _tmp2;
  if (_tim3O) _count2P = 0;
  if (( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) ))
  {
    if (! _count2I)
    {
      _count2P = _count2P + 1;
      _count2I = 1;
    }
  }
  else
  {
    _count2I = 0;
  }
  if (( (_tim3O) || (_gtv47) )) _count2P = 0;
  bool  _tmp3 = _dms1Q2;
  if (_tmp3)  {
    if (! _trgt3I) _trgt3 = ! _trgt3;
  }
  _trgt3I = _tmp3;
  bool  _tmp4 = _dms1Q3;
  if (_tmp4)  {
    if (! _trgt4I) _trgt4 = ! _trgt4;
  }
  _trgt4I = _tmp4;
  if (( (( (_bounse1O) && (_tim2O) )) && (( (_gtv17) || (_gtv18) || (_gtv19) || (_gtv20) )) ))
  {
    if (_tim3I) {
      if (_isTimer(_tim3P, 6000)) {
        _tim3O = 1;
      }
    } else {
      _tim3I = 1;
      _tim3P = millis();
    }
  } else {
    _tim3O = 0;
    _tim3I = 0;
  }
  bool  _tmp6 = _dms1Q6;
  if (_tmp6)  {
    if (! _trgt6I) _trgt6 = ! _trgt6;
  }
  _trgt6I = _tmp6;
  bool  _tmp8 = _dms1Q7;
  if (_tmp8)  {
    if (! _trgt8I) _trgt8 = ! _trgt8;
  }
  _trgt8I = _tmp8;
  bool  _tmp7 = _dms1Q5;
  if (_tmp7)  {
    if (! _trgt7I) _trgt7 = ! _trgt7;
  }
  _trgt7I = _tmp7;
  if (_trgt1) {
    _dispTempLength1 = (String("-")).length();
    if (_disp52oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp52oldLength = _dispTempLength1;
    _lcd1.setCursor(19, 1);
    _lcd1.print(String("-"));
  } else {
    if (_disp52oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp52oldLength = 0;
    }
  }
  _gtv60 = _trgt5;
  _gtv50 = _trgt1;
  if (_trgt5) {
    _dispTempLength1 = (String("V")).length();
    if (_disp13oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp13oldLength = _dispTempLength1;
    _lcd1.setCursor(19, 1);
    _lcd1.print(String("V"));
  } else {
    if (_disp13oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp13oldLength = 0;
    }
  }
  _gtv48 = _trgt2;
  if (_trgt2) {
    _dispTempLength1 = (String("T")).length();
    if (_disp32oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp32oldLength = _dispTempLength1;
    _lcd1.setCursor(19, 1);
    _lcd1.print(String("T"));
  } else {
    if (_disp32oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp32oldLength = 0;
    }
  }
  _gtv49 = _trgt3;
  _gtv59 = _trgt4;
  if (_trgt3) {
    _dispTempLength1 = (String("H")).length();
    if (_disp38oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp38oldLength = _dispTempLength1;
    _lcd1.setCursor(19, 1);
    _lcd1.print(String("H"));
  } else {
    if (_disp38oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp38oldLength = 0;
    }
  }
  if (_trgt4) {
    _dispTempLength1 = (String("D")).length();
    if (_disp39oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp39oldLength = _dispTempLength1;
    _lcd1.setCursor(19, 1);
    _lcd1.print(String("D"));
  } else {
    if (_disp39oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp39oldLength = 0;
    }
  }
  _gtv64 = _trgt6;
  _gtv47 =  _count2P  >=  8;
  if (_trgt6) {
    _dispTempLength1 = (String("Ki")).length();
    if (_disp4oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp4oldLength = _dispTempLength1;
    _lcd1.setCursor(18, 1);
    _lcd1.print(String("Ki"));
  } else {
    if (_disp4oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp4oldLength = 0;
    }
  }
  _gtv66 = _trgt8;
  _gtv65 = _trgt7;
  if (_trgt8) {
    _dispTempLength1 = (String("Kd")).length();
    if (_disp58oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp58oldLength = _dispTempLength1;
    _lcd1.setCursor(18, 1);
    _lcd1.print(String("Kd"));
  } else {
    if (_disp58oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp58oldLength = 0;
    }
  }
  if (_trgt7) {
    _dispTempLength1 = (String("Kp")).length();
    if (_disp57oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp57oldLength = _dispTempLength1;
    _lcd1.setCursor(18, 1);
    _lcd1.print(String("Kp"));
  } else {
    if (_disp57oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp57oldLength = 0;
    }
  }
  if (( (( (_gtv42) || (_gtv43) )) && (( (_gtv17) && (_gtv48) )) )) {
    if (!_SEEPR9OSN) {
      EEPROMWriteFloat(0, _gtv44);
      _SEEPR9OSN = 1;
    }
  } else {
    if (_SEEPR9OSN) {
      _SEEPR9OSN = 0;
    }
  }
  if (( (( (_gtv42) || (_gtv43) )) && (( (_gtv17) && (_gtv49) )) )) {
    if (!_SEEPR1OSN) {
      EEPROMWriteFloat(4, _gtv46);
      _SEEPR1OSN = 1;
    }
  } else {
    if (_SEEPR1OSN) {
      _SEEPR1OSN = 0;
    }
  }
  if (( (_gtv42) && (( (_gtv17) && (_gtv48) )) )) {
    _gtv44 = (_gtv44) + (_gtv56);
  }
  if (( (( (_gtv17) && (_gtv48) )) && (_gtv43) )) {
    _gtv44 = (_gtv44) - (_gtv56);
  }
  if (( (_gtv42) && (( (_gtv17) && (_gtv49) )) )) {
    _gtv46 = (_gtv46) + (_gtv57);
  }
  if (( (( (_gtv17) && (_gtv49) )) && (_gtv43) )) {
    _gtv46 = (_gtv46) - (_gtv57);
  }
  if (( (( (_gtv42) || (_gtv43) )) && (( (_gtv18) && (_gtv48) )) )) {
    if (!_SEEPR2OSN) {
      EEPROMWriteFloat(8, _gtv51);
      _SEEPR2OSN = 1;
    }
  } else {
    if (_SEEPR2OSN) {
      _SEEPR2OSN = 0;
    }
  }
  if (( (( (_gtv42) || (_gtv43) )) && (( (_gtv18) && (_gtv49) )) )) {
    if (!_SEEPR3OSN) {
      EEPROMWriteFloat(12, _gtv52);
      _SEEPR3OSN = 1;
    }
  } else {
    if (_SEEPR3OSN) {
      _SEEPR3OSN = 0;
    }
  }
  if (( (_gtv42) && (( (_gtv18) && (_gtv48) )) )) {
    _gtv51 = (_gtv51) + (_gtv56);
  }
  if (( (( (_gtv18) && (_gtv48) )) && (_gtv43) )) {
    _gtv51 = (_gtv51) - (_gtv56);
  }
  if (( (_gtv42) && (( (_gtv18) && (_gtv49) )) )) {
    _gtv52 = (_gtv52) + (_gtv57);
  }
  if (( (( (_gtv18) && (_gtv49) )) && (_gtv43) )) {
    _gtv52 = (_gtv52) - (_gtv57);
  }
  if (( (( (_gtv42) || (_gtv43) )) && (( (_gtv19) && (_gtv48) )) )) {
    if (!_SEEPR4OSN) {
      EEPROMWriteFloat(16, _gtv45);
      _SEEPR4OSN = 1;
    }
  } else {
    if (_SEEPR4OSN) {
      _SEEPR4OSN = 0;
    }
  }
  if (( (( (_gtv42) || (_gtv43) )) && (( (_gtv19) && (_gtv49) )) )) {
    if (!_SEEPR5OSN) {
      EEPROMWriteFloat(20, _gtv53);
      _SEEPR5OSN = 1;
    }
  } else {
    if (_SEEPR5OSN) {
      _SEEPR5OSN = 0;
    }
  }
  if (( (_gtv42) && (( (_gtv19) && (_gtv48) )) )) {
    _gtv45 = (_gtv45) + (_gtv56);
  }
  if (( (( (_gtv19) && (_gtv48) )) && (_gtv43) )) {
    _gtv45 = (_gtv45) - (_gtv56);
  }
  if (( (_gtv42) && (( (_gtv19) && (_gtv49) )) )) {
    _gtv53 = (_gtv53) + (_gtv57);
  }
  if (( (( (_gtv19) && (_gtv49) )) && (_gtv43) )) {
    _gtv53 = (_gtv53) - (_gtv57);
  }
  if (( (( (_gtv42) || (_gtv43) )) && (( (_gtv20) && (_gtv48) )) )) {
    if (!_SEEPR6OSN) {
      EEPROMWriteFloat(24, _gtv54);
      _SEEPR6OSN = 1;
    }
  } else {
    if (_SEEPR6OSN) {
      _SEEPR6OSN = 0;
    }
  }
  if (( (( (_gtv42) || (_gtv43) )) && (( (_gtv20) && (_gtv49) )) )) {
    if (!_SEEPR7OSN) {
      EEPROMWriteFloat(28, _gtv55);
      _SEEPR7OSN = 1;
    }
  } else {
    if (_SEEPR7OSN) {
      _SEEPR7OSN = 0;
    }
  }
  if (( (_gtv42) && (( (_gtv20) && (_gtv48) )) )) {
    _gtv54 = (_gtv54) + (_gtv56);
  }
  if (( (( (_gtv20) && (_gtv48) )) && (_gtv43) )) {
    _gtv54 = (_gtv54) - (_gtv56);
  }
  if (( (_gtv42) && (( (_gtv20) && (_gtv49) )) )) {
    _gtv55 = (_gtv55) + (_gtv57);
  }
  if (( (( (_gtv20) && (_gtv49) )) && (_gtv43) )) {
    _gtv55 = (_gtv55) - (_gtv57);
  }
  if (( (_gtv42) && (_gtv59) ))
  { if (!(_RTCST_Ost3))
    {
      _RTCST_Ost3 = 1;
      _tRTC1 = _RTC1.now();
      DateTime _tempTime((_tRTC1.year()), (_tRTC1.month()), ((_gtv2) + (1)), (_tRTC1.hour()), (_tRTC1.minute()), (_tRTC1.second()));
      _RTC1.adjust(_tempTime);
      _tRTC1 = _RTC1.now();
    }
  }
  else
  {
    _RTCST_Ost3 = 0;
  }
  if (( (_gtv59) && (_gtv43) ))
  { if (!(_RTCST_Ost4))
    {
      _RTCST_Ost4 = 1;
      _tRTC1 = _RTC1.now();
      DateTime _tempTime((_tRTC1.year()), (_tRTC1.month()), ((_gtv2) - (1)), (_tRTC1.hour()), (_tRTC1.minute()), (_tRTC1.second()));
      _RTC1.adjust(_tempTime);
      _tRTC1 = _RTC1.now();
    }
  }
  else
  {
    _RTCST_Ost4 = 0;
  }
  UB_137728376_ubi_123350138 = _gtv60;
  UB_137728376_ubi_192936444 = (EEPROMReadInt(32));
  UB_137728376_ubi_49121227 = _gen4O;
  UB_137728376_ubi_126099155 = _gen6O;
  UB_137728376_Instance1 = _func_UB_137728376(UB_137728376_Instance1, UB_137728376_ubi_123350138, UB_137728376_ubi_192936444, UB_137728376_ubi_49121227, UB_137728376_ubi_126099155, 1440, 0, 1);
  if (_gtv42) {
    if (! _gen4I) {
      _gen4I = 1;
      _gen4O = 1;
      _gen4P = millis();
    }
  } else {
    _gen4I = 0 ;
    _gen4O = 0;
  }
  if (_gen4I) {
    if ( _isTimer ( _gen4P , 100 )) {
      _gen4P = millis();
      _gen4O = ! _gen4O;
    }
  }
  if (UB_137728376_Instance1.ubo_98194804) {
    if (!_SEEPR10OSN) {
      EEPROMWriteInt(32, UB_137728376_Instance1.ubo_163329687);
      _SEEPR10OSN = 1;
    }
  } else {
    if (_SEEPR10OSN) {
      _SEEPR10OSN = 0;
    }
  }
  if (_gtv43) {
    if (! _gen6I) {
      _gen6I = 1;
      _gen6O = 1;
      _gen6P = millis();
    }
  } else {
    _gen6I = 0 ;
    _gen6O = 0;
  }
  if (_gen6I) {
    if ( _isTimer ( _gen6P , 100 )) {
      _gen6P = millis();
      _gen6O = ! _gen6O;
    }
  }
  _gtv62 = UB_137728376_Instance1.ubo_98194804;
  UB_137728376_ubi_123350138 = _gtv65;
  UB_137728376_ubi_192936444 = (EEPROMReadInt(34));
  UB_137728376_ubi_49121227 = _gen8O;
  UB_137728376_ubi_126099155 = _gen9O;
  UB_137728376_Instance2 = _func_UB_137728376(UB_137728376_Instance2, UB_137728376_ubi_123350138, UB_137728376_ubi_192936444, UB_137728376_ubi_49121227, UB_137728376_ubi_126099155, 500, 0, 1);
  if (UB_137728376_Instance2.ubo_98194804) {
    if (!_SEEPR11OSN) {
      EEPROMWriteInt(34, UB_137728376_Instance2.ubo_163329687);
      _SEEPR11OSN = 1;
    }
  } else {
    if (_SEEPR11OSN) {
      _SEEPR11OSN = 0;
    }
  }
  if (_gtv42) {
    if (! _gen8I) {
      _gen8I = 1;
      _gen8O = 1;
      _gen8P = millis();
    }
  } else {
    _gen8I = 0 ;
    _gen8O = 0;
  }
  if (_gen8I) {
    if ( _isTimer ( _gen8P , 100 )) {
      _gen8P = millis();
      _gen8O = ! _gen8O;
    }
  }
  if (_gtv43) {
    if (! _gen9I) {
      _gen9I = 1;
      _gen9O = 1;
      _gen9P = millis();
    }
  } else {
    _gen9I = 0 ;
    _gen9O = 0;
  }
  if (_gen9I) {
    if ( _isTimer ( _gen9P , 100 )) {
      _gen9P = millis();
      _gen9O = ! _gen9O;
    }
  }
  if (UB_137728376_Instance3.ubo_98194804) {
    if (!_SEEPR12OSN) {
      EEPROMWriteInt(36, UB_137728376_Instance3.ubo_163329687);
      _SEEPR12OSN = 1;
    }
  } else {
    if (_SEEPR12OSN) {
      _SEEPR12OSN = 0;
    }
  }
  UB_137728376_ubi_123350138 = _gtv64;
  UB_137728376_ubi_192936444 = (EEPROMReadInt(36));
  UB_137728376_ubi_49121227 = _gen10O;
  UB_137728376_ubi_126099155 = _gen11O;
  UB_137728376_Instance3 = _func_UB_137728376(UB_137728376_Instance3, UB_137728376_ubi_123350138, UB_137728376_ubi_192936444, UB_137728376_ubi_49121227, UB_137728376_ubi_126099155, 500, 0, 1);
  if (_gtv42) {
    if (! _gen10I) {
      _gen10I = 1;
      _gen10O = 1;
      _gen10P = millis();
    }
  } else {
    _gen10I = 0 ;
    _gen10O = 0;
  }
  if (_gen10I) {
    if ( _isTimer ( _gen10P , 100 )) {
      _gen10P = millis();
      _gen10O = ! _gen10O;
    }
  }
  if (_gtv43) {
    if (! _gen11I) {
      _gen11I = 1;
      _gen11O = 1;
      _gen11P = millis();
    }
  } else {
    _gen11I = 0 ;
    _gen11O = 0;
  }
  if (_gen11I) {
    if ( _isTimer ( _gen11P , 100 )) {
      _gen11P = millis();
      _gen11O = ! _gen11O;
    }
  }
  UB_137728376_ubi_123350138 = _gtv66;
  UB_137728376_ubi_192936444 = (EEPROMReadInt(38));
  UB_137728376_ubi_49121227 = _gen12O;
  UB_137728376_ubi_126099155 = _gen13O;
  UB_137728376_Instance4 = _func_UB_137728376(UB_137728376_Instance4, UB_137728376_ubi_123350138, UB_137728376_ubi_192936444, UB_137728376_ubi_49121227, UB_137728376_ubi_126099155, 500, 0, 1);
  if (_gtv42) {
    if (! _gen12I) {
      _gen12I = 1;
      _gen12O = 1;
      _gen12P = millis();
    }
  } else {
    _gen12I = 0 ;
    _gen12O = 0;
  }
  if (_gen12I) {
    if ( _isTimer ( _gen12P , 100 )) {
      _gen12P = millis();
      _gen12O = ! _gen12O;
    }
  }
  if (UB_137728376_Instance4.ubo_98194804) {
    if (!_SEEPR13OSN) {
      EEPROMWriteInt(38, UB_137728376_Instance4.ubo_163329687);
      _SEEPR13OSN = 1;
    }
  } else {
    if (_SEEPR13OSN) {
      _SEEPR13OSN = 0;
    }
  }
  if (_gtv43) {
    if (! _gen13I) {
      _gen13I = 1;
      _gen13O = 1;
      _gen13P = millis();
    }
  } else {
    _gen13I = 0 ;
    _gen13O = 0;
  }
  if (_gen13I) {
    if ( _isTimer ( _gen13P , 100 )) {
      _gen13P = millis();
      _gen13O = ! _gen13O;
    }
  }
  UB_139136934_ubi_122636397 = ( (( (( (_gen5O) && (!( (digitalRead (24)))) && (_bounseInputD22O) )) || (( (!(_bounseInputD22O)) && (_gtv42) )) )) || (( (( (_gtv43) && (!(_bounseInputD22O)) )) || (( (!( (digitalRead (28)))) && (!(_gen5O)) && (_bounseInputD22O) )) )) );
  UB_139136934_Instance1 = _func_UB_139136934(UB_139136934_Instance1, UB_139136934_ubi_122636397);
  if (( (( ((1) <= (_gtv2)) && ((18) >= (_gtv2)) )) && (_gtv13) )) {
    if (! _gen5I) {
      _gen5I = 1;
      _gen5O = 1;
      _gen5P = millis();
    }
  } else {
    _gen5I = 0 ;
    _gen5O = 0;
  }
  if (_gen5I) {
    if ( _isTimer ( _gen5P , ((EEPROMReadInt(32))) * (60000) )) {
      _gen5P = millis();
      _gen5O = ! _gen5O;
    }
  }
  if (_gen5O) {
    if (_trgrt1I) {
      _trgrt1 = 0;
    } else {
      _trgrt1 = 1;
      _trgrt1I = 1;
    }
  } else {
    _trgrt1 = 0;
    _trgrt1I = 0;
  };
  _gtv14 = ( (( (_gen5O) && (!( (digitalRead (24)))) && (_bounseInputD22O) )) || (( (!(_bounseInputD22O)) && (_gtv42) )) );
  if (( (( (_gen5O) && (!( (digitalRead (24)))) && (_bounseInputD22O) )) || (( (!(_bounseInputD22O)) && (_gtv42) )) )) {
    _dispTempLength1 = (String("/")).length();
    if (_disp53oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp53oldLength = _dispTempLength1;
    _lcd1.setCursor(18, 2);
    _lcd1.print(String("/"));
  } else {
    if (_disp53oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp53oldLength = 0;
    }
  }
  digitalWrite(41, ( (( (_gen5O) && (!( (digitalRead (24)))) && (_bounseInputD22O) )) || (( (!(_bounseInputD22O)) && (_gtv42) )) ));
  if (( (!(_bounseInputD22O)) || (_gtv13) )) {
    analogWrite(45, UB_139136934_Instance1.ubo_54273604);
  }
  digitalWrite(43, ( (( (_gtv43) && (!(_bounseInputD22O)) )) || (( (!( (digitalRead (28)))) && (!(_gen5O)) && (_bounseInputD22O) )) ));
  _gtv15 = ( (( (_gtv43) && (!(_bounseInputD22O)) )) || (( (!( (digitalRead (28)))) && (!(_gen5O)) && (_bounseInputD22O) )) );
  if (1) {
    if (!(( UB_139136934_Instance1.ubo_54273604) == (_stou9))) {
      Serial.println(UB_139136934_Instance1.ubo_54273604);
    }
  } _stou9 = UB_139136934_Instance1.ubo_54273604;
  if (( (( (_gtv43) && (!(_bounseInputD22O)) )) || (( (!( (digitalRead (28)))) && (!(_gen5O)) && (_bounseInputD22O) )) )) {
    _dispTempLength1 = (String("*")).length();
    if (_disp5oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp5oldLength = _dispTempLength1;
    _lcd1.setCursor(18, 2);
    _lcd1.print(String("*"));
  } else {
    if (_disp5oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp5oldLength = 0;
    }
  }
  _gtv61 = _trgrt1;
  if (_gtv13) {
    if (! _gen7I) {
      _gen7I = 1;
      _gen7O = 1;
      _gen7P =  millis();
    }
  } else {
    _gen7I = 0 ;
    _gen7O = 0;
  } if (_gen7I ) {
    if (_gen7O) {
      if ( _isTimer( _gen7P , 59000 )) {
        _gen7P = millis();
        _gen7O = 0;
      }
    } else  {
      if ( _isTimer( _gen7P , 1000 )) {
        _gen7P = millis();
        _gen7O = 1;
      }
    }
  }
  if (( (_gtv62) || (_gtv61) )) _count4P = ((EEPROMReadInt(32)));
  if (_gen7O)
  {
    if (! _count4I)
    {
      _count4P = _count4P - 1;
      _count4I = 1;
    }
  }
  else
  {
    _count4I = 0;
  }
  if (0) _count4P = 0;
  if (_gtv13) {
    _dispTempLength1 = (((((String((EEPROMReadInt(32))))) + (String(" ")) + ((String(_count4P)))))).length();
    if (_disp55oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp55oldLength = _dispTempLength1;
    _lcd1.setCursor(3, 3);
    _lcd1.print(((((String((EEPROMReadInt(32))))) + (String(" ")) + ((String(_count4P))))));
  } else {
    if (_disp55oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp55oldLength = 0;
    }
  }
  if (_gtv13) {
    if (_isTimer(_stou11, 10000 )) {
      Serial.println((((String((EEPROMReadInt(32))))) + (String(" ")) + ((String(_count4P)))));
      _stou11 = millis();
    }
  } else {
    _stou11 = millis();
  }
  _gtv61 =  _count4P  <=  0;
  if (_changeNumber1_Out) {
    if (!_SEEPR8OSN) {
      EEPROMWriteUnsignedLong(40, _count3P);
      _SEEPR8OSN = 1;
    }
  } else {
    if (_SEEPR8OSN) {
      _SEEPR8OSN = 0;
    }
  }

  if (( ( (digitalRead (24))) || ( (digitalRead (28))) || ( (digitalRead (26))) ))
  {
    if (! _count3I)
    {
      _count3P = _count3P + 1;
      _count3I = 1;
    }
  }
  else
  {
    _count3I = 0;
  }
  if (_changeNumber1_Out) {
    _changeNumber1_Out = 0;
  } else {
    _hasNumberChangeInTemp = _count3P;
    if (_hasNumberChangeInTemp != _changeNumber1_OLV) {
      _changeNumber1_OLV = _hasNumberChangeInTemp;
      _changeNumber1_Out = 1;
    }
  }
  if (_gtv13) {
    if (_isTimer(_stou10, 10000 )) {
      Serial.println((((String((EEPROMReadUnsignedLong(40))))) + (String(" srabotka koncevikov"))));
      _stou10 = millis();
    }
  } else {
    _stou10 = millis();
  }
  if (_gtv13) {
    _dispTempLength1 = (((String((EEPROMReadUnsignedLong(40)))))).length();
    if (_disp56oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp56oldLength = _dispTempLength1;
    _lcd1.setCursor(14, 2);
    _lcd1.print(((String((EEPROMReadUnsignedLong(40))))));
  } else {
    if (_disp56oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp56oldLength = 0;
    }
  }
  if (( (( ((4) <= (_gtv2)) && ((13) >= (_gtv2)) )) && (_gtv13) )) {
    if (! _gen2I) {
      _gen2I = 1;
      _gen2O = 1;
      _gen2P =  millis();
    }
  } else {
    _gen2I = 0 ;
    _gen2O = 0;
  } if (_gen2I ) {
    if (_gen2O) {
      if ( _isTimer( _gen2P , 300000 )) {
        _gen2P = millis();
        _gen2O = 0;
      }
    } else  {
      if ( _isTimer( _gen2P , 1200000 )) {
        _gen2P = millis();
        _gen2O = 1;
      }
    }
  }
  if (( (( ((4) <= (_gtv2)) && ((13) >= (_gtv2)) )) && (_gtv13) )) {
    _dispTempLength1 = (String("ohl")).length();
    if (_disp54oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp54oldLength = _dispTempLength1;
    _lcd1.setCursor(3, 3);
    _lcd1.print(String("ohl"));
  } else {
    if (_disp54oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp54oldLength = 0;
    }
  }
  if (_gen2O) {
    _dispTempLength1 = (String("*")).length();
    if (_disp6oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp6oldLength = _dispTempLength1;
    _lcd1.setCursor(7, 3);
    _lcd1.print(String("*"));
  } else {
    if (_disp6oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp6oldLength = 0;
    }
  }
  if (( ((4) <= (_gtv2)) && ((13) >= (_gtv2)) )) {
    _gtv21 = _gen2O;
  }
  if (( ((14) <= (_gtv2)) && ((17) >= (_gtv2)) )) {
    if (! _gen1I) {
      _gen1I = 1;
      _gen1O = 1;
      _gen1P =  millis();
    }
  } else {
    _gen1I = 0 ;
    _gen1O = 0;
  } if (_gen1I ) {
    if (_gen1O) {
      if ( _isTimer( _gen1P , 300000 )) {
        _gen1P = millis();
        _gen1O = 0;
      }
    } else  {
      if ( _isTimer( _gen1P , 1200000 )) {
        _gen1P = millis();
        _gen1O = 1;
      }
    }
  }
  if (( ((14) <= (_gtv2)) && ((17) >= (_gtv2)) )) {
    _dispTempLength1 = (String("ohl 2")).length();
    if (_disp7oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp7oldLength = _dispTempLength1;
    _lcd1.setCursor(3, 3);
    _lcd1.print(String("ohl 2"));
  } else {
    if (_disp7oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp7oldLength = 0;
    }
  }
  if (_gen1O) {
    _dispTempLength1 = (String("*")).length();
    if (_disp8oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp8oldLength = _dispTempLength1;
    _lcd1.setCursor(9, 3);
    _lcd1.print(String("*"));
  } else {
    if (_disp8oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp8oldLength = 0;
    }
  }
  if (( ((14) <= (_gtv2)) && ((17) >= (_gtv2)) )) {
    _gtv21 = _gen1O;
  }
  if (( ((18) <= (_gtv2)) && ((20) >= (_gtv2)) )) {
    if (! _gen3I) {
      _gen3I = 1;
      _gen3O = 1;
      _gen3P =  millis();
    }
  } else {
    _gen3I = 0 ;
    _gen3O = 0;
  } if (_gen3I ) {
    if (_gen3O) {
      if ( _isTimer( _gen3P , 300000 )) {
        _gen3P = millis();
        _gen3O = 0;
      }
    } else  {
      if ( _isTimer( _gen3P , 1200000 )) {
        _gen3P = millis();
        _gen3O = 1;
      }
    }
  }
  if (( ((18) <= (_gtv2)) && ((20) >= (_gtv2)) )) {
    _dispTempLength1 = (String("ohl 3")).length();
    if (_disp11oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp11oldLength = _dispTempLength1;
    _lcd1.setCursor(3, 3);
    _lcd1.print(String("ohl 3"));
  } else {
    if (_disp11oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp11oldLength = 0;
    }
  }
  if (_gen3O) {
    _dispTempLength1 = (String("*")).length();
    if (_disp12oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp12oldLength = _dispTempLength1;
    _lcd1.setCursor(9, 3);
    _lcd1.print(String("*"));
  } else {
    if (_disp12oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp12oldLength = 0;
    }
  }
  if (( ((18) <= (_gtv2)) && ((20) >= (_gtv2)) )) {
    _gtv21 = _gen3O;
  }
  digitalWrite(11, ( (( (( (_gtv7) && (_gtv13) )) && (!(( (_gtv21) && (_gtv13) ))) )) || (( (_gtv24) && (_gtv35) )) ));
  digitalWrite(10, 1);
  digitalWrite(9, ( (( (_gtv21) && (_gtv13) )) || (( (_gtv25) && (_gtv35) )) ));
  digitalWrite(8, ( (( (_gtv16) && (_gtv13) )) || (( (_gtv26) && (_gtv35) )) ));
  _SCT3_DLDIV = (map((_gtv63), (0), (255), (9289), (866)));
  if (_gtv65) {
    _dispTempLength1 = (((String((EEPROMReadInt(34)))))).length();
    if (_disp25oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp25oldLength = _dispTempLength1;
    _lcd1.setCursor(6, 2);
    _lcd1.print(((String((EEPROMReadInt(34))))));
  } else {
    if (_disp25oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp25oldLength = 0;
    }
  }
  if (_gtv14) {
    if (!_stou8) {
      Serial.println("dvigatel Vpered");
      _stou8 = 1;
    }
  } else {
    _stou8 = 0;
  }
  if (_gtv15) {
    if (!_stou7) {
      Serial.println("dvigatel nazad");
      _stou7 = 1;
    }
  } else {
    _stou7 = 0;
  }
  if (_gtv64) {
    _dispTempLength1 = (((String((EEPROMReadInt(36)))))).length();
    if (_disp59oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp59oldLength = _dispTempLength1;
    _lcd1.setCursor(6, 2);
    _lcd1.print(((String((EEPROMReadInt(36))))));
  } else {
    if (_disp59oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp59oldLength = 0;
    }
  }
  if (!( (digitalRead (24)))) {
    if (!_stou4) {
      Serial.println("Vpered");
      _stou4 = 1;
    }
  } else {
    _stou4 = 0;
  }
  if (_bounseInputD22O) {
    if (!_stou2) {
      Serial.println("dverca");
      _stou2 = 1;
    }
  } else {
    _stou2 = 0;
  }
  if (_gtv66) {
    _dispTempLength1 = (((String((EEPROMReadInt(38)))))).length();
    if (_disp60oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp60oldLength = _dispTempLength1;
    _lcd1.setCursor(6, 2);
    _lcd1.print(((String((EEPROMReadInt(38))))));
  } else {
    if (_disp60oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp60oldLength = 0;
    }
  }
  if (!( (digitalRead (28)))) {
    if (!_stou6) {
      Serial.println("nazad");
      _stou6 = 1;
    }
  } else {
    _stou6 = 0;
  }
  if (!( (digitalRead (26)))) {
    if (!_stou5) {
      Serial.println("Centr");
      _stou5 = 1;
    }
  } else {
    _stou5 = 0;
  }




}
bool _isTimer(unsigned long startTime, unsigned long period )
{
  unsigned long currentTime;
  currentTime = millis();
  if (currentTime >= startTime) {
    return (currentTime >= (startTime + period));
  } else {
    return (currentTime >= (4294967295 - startTime + period));
  }
}
String  _floatToStringWitRaz(float value, int raz)
{

  return String(value, raz);
}
void  _SCT3positiveCoutFunction()
{ if ((!_SCT3_DLOSN) && (!_SCT3_DLIDM)) {
    _SCT3_DLIDM = 1;
    _SCT3_DLST = micros();
  }
}
ISR (TIMER2_OVF_vect)
{ if ((_SCT3_DLIDM)) {
    if (_SCT3_DLIDM) {
      if (_SCT3_DLOSN) {
        if ((_SCT3_DLST + 4) < micros()) {
          _SCT3_DLST = micros();
          _SCT3_DLOSN = 0;
          digitalWrite(53, 0);
          _SCT3_DLIDM = 0;
        }
      } else {
        if ((_SCT3_DLST + _SCT3_DLDIV) < micros()) {
          _SCT3_DLST = micros();
          _SCT3_DLOSN = 1;
          digitalWrite(53, 1);;
        }
      }
    }
  }
  TCNT2 = 210;
}
int EEPROMReadInt(int p_address)
{
  byte lowByte = EEPROM.read(p_address);
  byte highByte = EEPROM.read(p_address + 1);

  return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}
unsigned long EEPROMReadUnsignedLong(int p_address)
{ unsigned long result;
  byte val = EEPROM.read(p_address + 3);
  result = (result << 8) | val;
  val = EEPROM.read(p_address + 2 );
  result = (result << 8) | val;
  val = EEPROM.read(p_address + 1 );
  result = (result << 8) | val;
  val = EEPROM.read(p_address);
  result = (result << 8) | val;
  return result;
}
float EEPROMReadFloat(int p_address)
{ byte x[4];
  for (byte i = 0; i < 4; i++) x[i] = EEPROM.read(i + p_address);
  float *y = (float *)&x;
  return y[0];
}
void EEPROMWriteInt(int p_address, int p_value)
{
  byte lowByte = ((p_value >> 0) & 0xFF);
  byte highByte = ((p_value >> 8) & 0xFF);

  EEPROM.write(p_address, lowByte);
  EEPROM.write(p_address + 1, highByte);
}
void EEPROMWriteUnsignedLong(int p_address, unsigned long p_value)
{
  EEPROM.write(p_address, p_value & 0xFF);
  EEPROM.write(p_address + 1, (p_value & 0xFF00) >> 8);
  EEPROM.write(p_address + 2, (p_value & 0xFF0000) >> 16);
  EEPROM.write(p_address + 3, (p_value & 0xFF000000) >> 24);
}
void EEPROMWriteFloat(int p_address, float p_value)
{
  byte *x = (byte *)&p_value;
  for (byte i = 0; i < 4; i++) EEPROM.write(i + p_address, x[i]);
}
struct UB_137728376 _func_UB_137728376(struct UB_137728376 _ubInstans, bool ubi_123350138, int ubi_192936444, bool ubi_49121227, bool ubi_126099155, int ubpar_103751892, int ubpar_167382145, int ubpar_191717332)
{
  bool ubo_98194804 = _ubInstans.ubo_98194804;
  int ubo_163329687 = _ubInstans.ubo_163329687;
  int _gtv1 = _ubInstans._gtv1;
  if (( (((ubi_192936444) + (ubpar_191717332)) < (ubpar_103751892)) && (( (ubi_49121227) && (ubi_123350138) )) )) {
    _gtv1 = (ubi_192936444) + (ubpar_191717332);
  }
  ubo_98194804 = ( (( (ubi_49121227) || (ubi_126099155) )) && (ubi_123350138) );
  ubo_163329687 = _gtv1;
  if (( (( (ubi_123350138) && (ubi_126099155) )) && (((ubi_192936444) - (ubpar_191717332)) > (ubpar_167382145)) )) {
    _gtv1 = (ubi_192936444) - (ubpar_191717332);
  }
  _ubInstans.ubo_98194804 = ubo_98194804;
  _ubInstans.ubo_163329687 = ubo_163329687;
  _ubInstans._gtv1 = _gtv1;
  return _ubInstans;
}
struct UB_139136934 _func_UB_139136934(struct UB_139136934 _ubInstans, bool ubi_122636397)
{
  int ubo_54273604 = _ubInstans.ubo_54273604;
  bool _gtv1 = _ubInstans._gtv1;
  bool _gtv2 = _ubInstans._gtv2;
  bool _gtv3 = _ubInstans._gtv3;
  bool _count1I = _ubInstans._count1I;
  int _count1P = _ubInstans._count1P;
  bool _gen1I = _ubInstans._gen1I;
  bool _gen1O = _ubInstans._gen1O;
  unsigned long _gen1P = _ubInstans._gen1P;
  if (( (!(_gtv2)) && (_gtv3) )) {
    if (! _gen1I) {
      _gen1I = 1;
      _gen1O = 1;
      _gen1P = millis();
    }
  } else {
    _gen1I = 0 ;
    _gen1O = 0;
  }
  if (_gen1I) {
    if ( _isTimer ( _gen1P , 100 )) {
      _gen1P = millis();
      _gen1O = ! _gen1O;
    }
  }
  if (_gtv1) _count1P = 230;
  if (_gen1O)
  {
    if (! _count1I)
    {
      _count1P = _count1P + 1;
      _count1I = 1;
    }
  }
  else
  {
    _count1I = 0;
  }
  if (!(ubi_122636397)) _count1P = 0;
  _gtv2 = (_count1P) == (255);
  ubo_54273604 = _count1P;
  _gtv1 =  _count1P  >=  255;
  _gtv3 = ubi_122636397;
  _gtv1 = !(ubi_122636397);
  _ubInstans.ubo_54273604 = ubo_54273604;
  _ubInstans._gtv1 = _gtv1;
  _ubInstans._gtv2 = _gtv2;
  _ubInstans._gtv3 = _gtv3;
  _ubInstans._count1I = _count1I;
  _ubInstans._count1P = _count1P;
  _ubInstans._gen1I = _gen1I;
  _ubInstans._gen1O = _gen1O;
  _ubInstans._gen1P = _gen1P;
  return _ubInstans;
}

 

ecs23
Offline
Зарегистрирован: 23.02.2015

Я делал на Flprog

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

1. Для кода есть тег {code}

2. И как тут можно что-то понять? Вижу ПИД. Больше ничего не вижу.

flp бы сразу показал чтоли.

 

 

ecs23
Offline
Зарегистрирован: 23.02.2015

я сейчас его доделываю потому, что пид подвисает из за того что DHT22 опрашивается один раз за 2 секунды

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

DHT22 в инкубаторе месяц не проживет. 

ecs23
Offline
Зарегистрирован: 23.02.2015

Umka пишет:

DHT22 в инкубаторе месяц не проживет. 

ОШИБАЕШЬСЯ у меня второй год работает отлично погрешность влажности 2% а температуру я сделал из трёх DS18B20 и использую среднеарифметическую а DHT22 как работал так и будет работать 

ecs23
Offline
Зарегистрирован: 23.02.2015

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

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

HTU21 оптимально. И термометр хороший и гигрометр. Только в фильтр от пыли спрятать.

Vladik
Offline
Зарегистрирован: 29.06.2016

Здрастуйте у мене така проблемка я новичок  допоможіть ісправити ошипку.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Не отвечает Ваша Дуська на звонок. Может порт не тот, может драйвер не тот, может плата Ардуино не та выбрана, может загрузчик затерт программатором. Если Про Мини, то может быть еще провода от конвертера не так подключены. А может она совсем того, померла. 

SemLeik
Offline
Зарегистрирован: 15.05.2014

Приветствую, ребят!

Я хочу внести материалы с кодом, со схемами и возможно с картинками на свой блог. Есть такой вопрос, это чьё-то ноу хау? Код в открытом доступе? Чтобы не получилось так, что я нарушил чьи-то права...

lean_74
Offline
Зарегистрирован: 22.12.2015

SemLeik пишет:

Приветствую, ребят!

Я хочу внести материалы с кодом, со схемами и возможно с картинками на свой блог. Есть такой вопрос, это чьё-то ноу хау? Код в открытом доступе? Чтобы не получилось так, что я нарушил чьи-то права...

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

andreyt
Offline
Зарегистрирован: 20.08.2012

Всем привет, тоже тут понадобился инкубатор, склеил за вечер коробку, написал программу, из куском взятых из инета, вот выкладываю может кому поможет. работает на ПИД регулировании контроль температуры на DS1820, влажность ОТОБРАЖАЕТСЯ с DHT22 нагрев Лампой 40ВТ через реле. Температуру держит+-0,1гр. Прогромирование температуры через сериал с компа, отсчет работы программы в ППЗУ


#include <class_noDELAY.h>
noDELAY W_Minut;      // таймер отсчета времени работы программы
noDELAY W_cHasov;    // таймер записи в eeprom
noDELAY W_humi;      // таймер опроса датчмка влажности


#include <OneWire.h>   // библиотека датчика температуры ds1820
#include <PID_v1.h>    // библиотека ПИД контролера
#include <EEPROM.h>    // библиотека ППЗУ
#include <dht.h>       // библиотека датчика влажности

dht DHT;                // иницианализация 

#define DHT22_PIN 5      // указание пина подключения датчика DHT22

#define RELAY_PIN 6      // указание пина подключения реле нагрева      
#define FRELAY_PIN 3      // противопожарное реле

// Резервируем адреса ППЗУ
#define eepromM 0      //минут работает система
#define eepromH 1      //часов работает система
#define eepromS 2      //Суток  системы
#define eepromT 3       //Температура работает система
//define eepromH4 4 //? работает система
//#define eepromH5 5 //? работает система


double Setpoint;                            // Требуемое показание датчика температуры умноженное на 10;
double Input, Output;                       // температура передаваемая а ПИД, Размер окна возвращаемый ПИДом
                                                // Определяем агрессивные и консервативные параметры PID управления
//double aggKp=40, aggKi=2, aggKd=10;
//double consKp=1, consKi=0.05, consKd=0.25;
//double consKp=900, consKi=20, consKd=50;  
//int WindowSize = 3000;

//double consKp=2800, consKi=820, consKd=2000;
//int WindowSize = 9000;              //размер окна для реле

double consKp=5800, consKi=1620, consKd=4000; // Определяем начальные параметры согласно библиотеке Подобраны експериментально для окна 9000
int WindowSize = 9000;              //размер окна для реле


PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT); // Иницианализация ПИД


unsigned long windowStartTime; // начало окна

OneWire  ds(7);                                    // DS18S20 Датчик на ноге 7
byte addr[1][8];                                // Адрес датчика, массив 1х8
double tempToPID;                                // Переменная для отправки температуры с датчика на PID управление
int HighByte, LowByte, TReading;                // Переменные для работы DS18S20: старший и младший байты и итоговая температура
//char buf[20];            // пока писал коментарии нашел лишнее объявлени, полезно писать коментарии :))

bool askTemperature = 0;            // флаг - температура запрошена!
int Tc_100;                        // тут увроде хранится Т от датчика 1820
int timeWhenAskTemperature;        // для отслеживания времени расчета температуры датчиком 1820 можно переделать на nodeley, но взята из инета без изменения
int millisNow;                      // для отслеживания времени расчета температуры датчиком 1820 можно переделать на nodeley, но взята из инета без изменения
unsigned long Swork,Hwork,Mwork;	// Переменная для записи режима и температуры в EEPROM;
// int 
        unsigned long mil1;
int dela;
void setup(void)
{
    dela=0;
    windowStartTime = millis();        // определяем начало окна
     //tell the PID to range between 0 and the full window size
    myPID.SetOutputLimits(0, WindowSize); // определяем диапазон работы ПИД
   
    pinMode(RELAY_PIN, OUTPUT);    // Реле пин в режиме выхода
    pinMode(FRELAY_PIN, OUTPUT);    // Реле пин в режиме выхода
     
    Serial.begin(9600);
    ds.search(addr[0]);                            // Определим адрес нашего единственного датчика
    myPID.SetMode(AUTOMATIC);                    // Включаем PID
    
    Mwork = (EEPROM.read(eepromM));	    // Прочитаем из памяти часы работы;
                                            // получим диапазон 0-60
    if (Mwork>=60) {	                    // Если там чушь, установим 0 часов.
    Mwork = 0;
	}


    Hwork = (EEPROM.read(eepromH));	    // Прочитаем из памяти часы работы;
                                            // получим диапазон 0-60
    if (Hwork>=26) {	                    // Если там чушь, установим 0 часов.
    Hwork = 0;
	}

    Swork = (EEPROM.read(eepromS));	    // Прочитаем из памяти сутки работы;
                                            // получим диапазон 0-24
    if (Swork>=31) {	                    // Если там чушь, установим 0 суток.
    Swork = 0;
	}

    Setpoint = (EEPROM.read(eepromT))+200;	// Прочитаем из памяти необходимую температуру;
                                        // поскольку там БАЙТ (знач. менее 255) - добавим 200 
                                        // получим диапазон 20,0-45,5.
     if (Setpoint>410 || Setpoint <300 ) {	// Если там чушь, установим 37,5 градуса.
     Setpoint = 375;
     }
    W_Minut.start();
    W_cHasov.start();
    W_humi.start();
    digitalWrite(FRELAY_PIN, LOW);    
 
}

void loop(void) {
char  incomingByte;

//delay (dela);
    W_humi.read(2500);
    if (W_humi.tick) {int chk = DHT.read22(DHT22_PIN);
          switch (chk)
     {
     case DHTLIB_OK:
        break;
     case DHTLIB_ERROR_CHECKSUM:
        Serial.print("Checksum error,\t");
        break;
     case DHTLIB_ERROR_TIMEOUT:
        Serial.print("Time out error,\t");
        break;
     default:
        Serial.print("Unknown error,\t");
        break;
     }
    }    
        
        
        
        
     if (Serial.available() > 0) {  //если есть доступные данные
        // считываем байт
        incomingByte = Serial.read();
                   Serial.println();
         Serial.print(" incomingByte= ");Serial.println(incomingByte);
         if (incomingByte == 'R') {
         Mwork=0;Hwork=0;Swork=0;
         }   
        if (incomingByte == '?') {Serial.println();Serial.println(" 'R' - Restatrt time, '+' - UP T, '-' - Down T");}
        if (incomingByte == '?') {Serial.println();Serial.println(" 'M''H' - time +, 'm''h' - time - .");delay (5000);}
        if (incomingByte == '+') {Setpoint=(Setpoint+1);Serial.println(" UP ");}
        if (incomingByte == '-') {Setpoint=(Setpoint-1);Serial.println(" Down ");}
        if (incomingByte == 'M') {Mwork=(Mwork+1);Serial.println(" Time correct ");}
        if (incomingByte == 'm') {Mwork=(Mwork-1);Serial.println(" Time correct ");}
        if (incomingByte == 'H') {Hwork=(Hwork+1);Serial.println(" Time correct ");}
        if (incomingByte == 'h') {Hwork=(Hwork-1);Serial.println(" Time correct ");}        
        
         if (EEPROM.read(eepromM)!=Mwork) { EEPROM.write(eepromM, (byte) (Mwork));Serial.println("M Save");}
         if (EEPROM.read(eepromH)!=Hwork) { EEPROM.write(eepromH, (byte) (Hwork));Serial.println("H Save"); }
         if (EEPROM.read(eepromS)!=Swork) { EEPROM.write(eepromS, (byte) (Swork));Serial.println("S Save"); }
         if (EEPROM.read(eepromT)!=(Setpoint-200)) { EEPROM.write(eepromT, (byte) (Setpoint-200));Serial.println("T Save");delay (500); }
         delay (500);
     }
           W_Minut.read(59958);
    	if (W_Minut.tick) {
      dela=(dela+1);
      Serial.println();
      
      
      Serial.print(( "mili= "));    // выводим 
      Serial.print(millis());      //  общее время
      Serial.print(( "/"));         //  
      Serial.print(dela);          //  количество циклов W_Minut
      Serial.print(("="));      
      Serial.print(millis()/dela); //  Среднее время выполнения W_Minut по результатам 
      //за сутки это - 60000 прибавить к "W_Minut.read(59958)" строка 156 для корекции времени



    
//      Serial.print(mil1);     


//     mil1=millis();
//      delay(dela);      
         Mwork=Mwork+1;Serial.print(" M+ ");delay (500);
        //Serial.print ("----------");
        //Serial.println (Mwork);Serial.print("M=");Serial.println(Mwork);
         if (Mwork >= 60) {
         Mwork=Mwork-60;Serial.print(" M=0 ");Serial.println(Mwork);
          if (Hwork >= 23) {
          Hwork=Hwork-23;Swork=Swork+1;Serial.print(" h=0 S+ ");Serial.println(Hwork);
          if (EEPROM.read(eepromM)!=Mwork) { EEPROM.write(eepromM, (byte) (Mwork));Serial.println("M Save");delay (500); }          
          if (EEPROM.read(eepromH)!=Hwork) {EEPROM.write(eepromH, (byte) (Hwork));Serial.println("H Save1");}
          if (EEPROM.read(eepromS)!=Swork) {EEPROM.write(eepromS, (byte) (Swork));Serial.println("S Save1");}          
          }
          else {
          Hwork=Hwork+1;Serial.print(" H+ ");
         if (EEPROM.read(eepromM)!=Mwork) { EEPROM.write(eepromM, (byte) (Mwork));Serial.println("M Save");delay (500); }          
         if (EEPROM.read(eepromH)!=Hwork) { EEPROM.write(eepromH, (byte) (Hwork));Serial.println("H Save");delay (500); }
         if (EEPROM.read(eepromS)!=Swork) { EEPROM.write(eepromS, (byte) (Swork));Serial.println("S Save");delay (500); }          }
         }
          
//        Serial.print (" h=");  
  //      Serial.print (Hwork);  
    //    Serial.print (" s=");  
      //  Serial.print (Swork);                  
        //Serial.println (Mwork);
          Serial.println();
        }
    Serial.print( "S=");
    Serial.print(Swork);    
    Serial.print( " h=");
    Serial.print(Hwork);
    Serial.print( " min=");
    Serial.print(Mwork);
    Serial.print("(");    
    Serial.print (EEPROM.read(eepromM));
    Serial.print(") ");  
    Serial.print((millis()%60000)/1000);  
    Serial.print (" \t");
        Serial.print("T=");    // заданная температура
    Serial.print (Setpoint/10);
    Serial.print("(");    
    Serial.print (EEPROM.read(eepromT)+200);
    Serial.print(")");        
    Serial.print(", Input ");  // текущая температура
    Serial.print(Input/10);     

//      Serial.print ((millis() ));
      Serial.print ("");


    Serial.print(",\t H=");      
    Serial.print(DHT.humidity, 1);
    Serial.print(" T=");
    Serial.print(DHT.temperature, 1);
    Serial.print(",\t");
    Serial.print("Output ");
    Serial.print(Output);
    
        Serial.println();
    

    W_cHasov.read(600100);
    if (W_cHasov.tick) {
      if (EEPROM.read(eepromM)!=Mwork) {EEPROM.write(eepromM, (byte) (Mwork));Serial.println("M Save1"); }
      if (EEPROM.read(eepromH)!=Hwork) {EEPROM.write(eepromH, (byte) (Hwork));Serial.println("H Save1");}
      if (EEPROM.read(eepromS)!=Swork) {EEPROM.write(eepromS, (byte) (Swork));Serial.println("S Save1");}
      if (EEPROM.read(eepromT)!=(Setpoint-200)) {EEPROM.write(eepromT, (byte) (Setpoint-200));Serial.println("T Save"); }
    }

    byte i;
    byte data[12];

    millisNow = millis();						// Узнаем текущее время;

		if (!askTemperature) {						// Если не запрашивали температуру с датчика - запросим;
			
			ds.reset();								// Ниже - стандартная процедура чтения датчика;
			ds.select(addr[0]);
			ds.write(0x44,1);						// Старт расчетов датчика;
			askTemperature = true;					// Подъем флага - температура запрошена!
			timeWhenAskTemperature = millisNow;		// Запомним время запроса температуры;
		}
		
		// Нужна задержка для расчета 850 миллисекунд, алгоритм ниже ее реализует;
		
		if (askTemperature & (millisNow-timeWhenAskTemperature) >850) {	// Если температура запрошена и прошло более 850 мс
			ds.reset();
			ds.select(addr[0]);
			ds.write(0xBE);							// Указание на будущее чтение;
			
			for ( i = 0; i < 9; i++) {				// Читаем 9 bytes;
				data[i] = ds.read();
			}
			
			LowByte = data[0];
			HighByte = data[1];
			TReading = (HighByte << 8) + LowByte;
			Tc_100 = (6 * TReading) + TReading / 4;	// Стандартная операция пересчета для DS18b20 (100 * 0.0625) или 6.25;
			tempToPID = (double) Tc_100/100;
			
			//Serial.print(tempToPID);
			//Serial.print(" = tempToPID:   ");
			
			//lcd.setCursor(0, 0);					// Печатаем на ЖК;
			  //lcd.print("t=");
			//lcd.print(tempToPID);
			//lcd.print("\x99""c");

			Input = tempToPID*10;					// Пишем текущую (тепературу х 10) в переменную для передачи в PID;
			askTemperature = false;					// Сбросили флаг о запросе температуры;
			
		}
    			if (Input>=400)   {digitalWrite(FRELAY_PIN, HIGH);}      // если температура привысила предел отключаем 2е реле
			if (Input<=370)   {digitalWrite(FRELAY_PIN, LOW);}     // если температура остылавключаем 2е реле
    
    
    
    double gap = abs(Setpoint-Input);            
    if(gap<2)
    {                                            
      myPID.SetTunings(consKp, consKi, consKd);
//          myPID.SetTunings(aggKp, aggKi, aggKd);
    }
    else
    {
//        myPID.SetTunings(aggKp, aggKi, aggKd);
        myPID.SetTunings(consKp, consKi, consKd);
    }

    myPID.Compute();
     /************************************************
   * turn the output pin on/off based on pid output
   ************************************************/
  if (millis() - windowStartTime > WindowSize)
  { //time to shift the Relay Window
    windowStartTime += WindowSize;
  }

  if (Output < millis() - windowStartTime) digitalWrite(RELAY_PIN, HIGH);
  else digitalWrite(RELAY_PIN, LOW);    
    
    //analogWrite(3,Output);                            // А к этой ноге и присоединен блок вентиляторов!
//    Serial.print("Output ");
//    Serial.print(Output);
//    Serial.print(", Input ");
//    Serial.print(Input);
    
 //   Serial.print( " Tc_100 ");
 //   Serial.print(Tc_100);

    // Serial.println(" = Output");
           
           
           
}

lean_74
Offline
Зарегистрирован: 22.12.2015

andreyt пишет:

Всем привет, тоже тут понадобился инкубатор, склеил за вечер коробку, написал программу, из куском взятых из инета, вот выкладываю может кому поможет. работает на ПИД регулировании контроль температуры на DS1820, влажность ОТОБРАЖАЕТСЯ с DHT22 нагрев Лампой 40ВТ через реле. Температуру держит+-0,1гр. Прогромирование температуры через сериал с компа, отсчет работы программы в ППЗУ

Я так понял ты в память по адресу 0 минуты пишешь, т.е 1440 раз за сутки, тут информация была, что ERROM  расчитана на порядка 100 тыс записей, т.е тебе хватит ее на 69,4 дня, с отладкой примерно на три инкубации куриных яиц. Потом микроконтроллер можно выкидывать.

bwn
Offline
Зарегистрирован: 25.08.2014

lean_74 пишет:

andreyt пишет:

Всем привет, тоже тут понадобился инкубатор, склеил за вечер коробку, написал программу, из куском взятых из инета, вот выкладываю может кому поможет. работает на ПИД регулировании контроль температуры на DS1820, влажность ОТОБРАЖАЕТСЯ с DHT22 нагрев Лампой 40ВТ через реле. Температуру держит+-0,1гр. Прогромирование температуры через сериал с компа, отсчет работы программы в ППЗУ

Я так понял ты в память по адресу 0 минуты пишешь, т.е 1440 раз за сутки, тут информация была, что ERROM  расчитана на порядка 100 тыс записей, т.е тебе хватит ее на 69,4 дня, с отладкой примерно на три инкубации куриных яиц. Потом микроконтроллер можно выкидывать.

Не, не так. Проект будет коммерческий - восстановление работоспособности за 1тыр., ибо МК относится к расходным материалам. Плохо если, он зараза, начнет по 2-3 миллиона циклов выдерживать (гоняли где то для опыта). )))))))

ecs23
Offline
Зарегистрирован: 23.02.2015

Бред какойто

bwn
Offline
Зарегистрирован: 25.08.2014

ecs23 пишет:

Бред какойто

Бред, порождает бред. А вот долбить с такой частотой EEPROM действительно не стоит.

ecs23
Offline
Зарегистрирован: 23.02.2015

Я не дурак ну а нахрен всё писать в еепром!!!????

Нужно отправлять на комп в базу и сделать автономность

Я вот делал на 18 шт eht22 отправлял всё в EXEL с помощью макросов все графики 

если нужно сохранять данные пожалуйста есть микро сд

ecs23
Offline
Зарегистрирован: 23.02.2015

лично я пишу всё в FLPROG

и код получается меньше

andreyt
Offline
Зарегистрирован: 20.08.2012

lean_74 пишет:

Я так понял ты в память по адресу 0 минуты пишешь, т.е 1440 раз за сутки, тут информация была, что ERROM  расчитана на порядка 100 тыс записей, т.е тебе хватит ее на 69,4 дня, с отладкой примерно на три инкубации куриных яиц. Потом микроконтроллер можно выкидывать.

 

Нет у меня пишется раз в 10 минут это 694 дня, 2 года непрерывной работы, программа работает 8 дней еще осталось 9 свою задачу выполняет, если вам не надо время работы программы можете вообще отключить запись в ПЗУ, или писать раз в час.

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

bwn
Offline
Зарегистрирован: 25.08.2014

andreyt, ну что Вы так отреагировали? Сказали, что не самое лучшее решение. Исправлять или нет, дело Ваше. Использовать или нет, дело юзера. Вот и весь конфликт.

andreyt
Offline
Зарегистрирован: 20.08.2012

минуты пишутся что бы время не сбивалось при ресете контроллера, время нужно для включения охлаждения по времени и для поворота яиц, но дети и так в очередь стоят что бы яйца певорачивать, поэтому пока что не реализованно. вообще инкубатор делал для детей по их многочисленным просьбам. вот вам фото можете покритиковать https://yadi.sk/i/JbGz9ak83FmTHy

bwn
Offline
Зарегистрирован: 25.08.2014

Для 20 яиц, корпус сильно могучий. В таком штук 400-500 выводить можно.)))

lean_74
Offline
Зарегистрирован: 22.12.2015

andreyt пишет:

Мне вот предложенные тут не подошли, я же по этому поводу не устраиваю демонстраций

какие "демонстрации", обидеть вообще не было желания, да и разбираться с чужим кодом мало кому просто так захочется, я мельком глянул, посоветовал, что так делать не стоит, да и врядли ты свой комп или ноут будешь хранить в инкубатории, чтобы туда данные скидывать. Инкубатор или автономный, или имеет какие-то средтва доставки до сервера, где данные собираются, буть то радиоканал, Wi-Fi,изернет и т.п. Конечно отладку или хобби я не рассматриваю. Для своего проекта я наоборот пытался собрать все самое лучшее (по моему мнению), что было предложено здесь на сайте., и если бы что-то меня заинтерисовало в твоем, добавил бы в свой проект. По крайней мере, ничего нового в твоем проекте я не увидел. может и ошибаюсь, попробуй переубеди.