إنشاء قوائم باستخدام FLProg


مساء الخير في برنامج FLProg منذ الإصدار 2.1. ظهرت كتل مصمم القائمة. في هذا الدرس ، سيتم مناقشة إنشاء قائمة باستخدام هذه الكتل.

من أجل أن تكون أكثر إثارة للاهتمام ، فكر في المشكلة الحقيقية. نقوم بتجميع وحدة التحكم في درجة الحرارة ، والتي ستشمل جهاز استشعار درجة الحرارة وسخان ومروحة. بالإضافة إلى ذلك ، سيصاحب إدراج مروحة أو سخان إشارة صوتية. باستخدام القائمة ، سنحدد العتبات لتشغيل وإيقاف تشغيل الأجهزة والحاجة إلى إشارة صوتية. لتبسيط التصحيح ، نقوم أولاً بمحاكاة مستشعر درجة الحرارة باستخدام مقاوم متغير.

سيتكون الإصدار الأول من الجهاز من:

Arduino Uno:
الصورة

درع لوحة المفاتيح LCD:
الصورة

كتلتان مرحلتان:


وجرس نشط:


هنا رسم تخطيطي للجهاز



بالنسبة للمبتدئين ، المشروع بأكمله.
image

النظر في كل مجلس على حدة.



كل شيء بسيط هنا ، نحصل على القيمة من المدخلات التناظرية ونقياسها إلى النطاق المطلوب. سيتم تغيير قيمة درجة الحرارة من -20 إلى 80. إعدادات كتلة مقياس.





على هذه اللوحة ، يتم تحليل إشارة أزرار لوحة مفاتيح LCD ويتم إنشاء الإشارات المقابلة. يتم إجراء التحليل باستخدام كتلة 5B1 المخصصة. تمت مناقشة إنشاء هذه الكتلة في هذا الدرس ، حيث يمكنك تنزيل هذه الكتلة.

نظرًا لعدم وجود أزرار كافية على الدرع ، سنقوم بتوسيع إمكانات الزر "تحديد".



يعمل هذا المخطط على النحو التالي. تؤدي ضغطة قصيرة على الزر إلى توليد دفعة "ادخل القائمة" ، ودفع طويل (يدوم لفترة أطول من إعداد مؤقت TON) يولد دفعة "الخروج من القائمة".



يتم إنشاء إشارة تنشيط القائمة على هذا المنتدى. يعد مؤقت TON ضروريًا للحماية من التوليد العرضي لهذه الإشارة عند بدء تشغيل وحدة التحكم. حسنًا ، اللوحة مباشرة مع كتلة القائمة الرئيسية.



في وصف كتلة القائمة (علامة التبويب "معلومات" لمحرر الكتلة) ، حاولت وصف عملية الكتلة بشكل كامل قدر الإمكان. ضع في اعتبارك صبغة الكتلة في هذه الحالة بالذات.

علامة التبويب - "شجرة القائمة":


تتكون شجرة القائمة من مجموعتين من القوائم لضبط درجات الحرارة لتشغيل وإيقاف المدفأة والتهوية ، بالإضافة إلى عنصر واحد للتحكم في نشاط الصوت. بشكل عام ، تسمح لك هذه الكتلة بإنشاء قائمة بأي تعقيد أو تداخل. الشيء الرئيسي هو أنه سيكون هناك ذاكرة تحكم كافية.

تعيين عنصر قائمة المجموعة.


إعدادات إعدادات درجة الحرارة.


سأوضح قليلاً عن قيمة البداية في EEPROM. تتم كتابة هذه القيمة إلى EEPROM في بداية الدورة الأولى بعد تحميل البرنامج في وحدة التحكم. سيحدث هذا مرة واحدة فقط بعد تنزيل كل برنامج جديد إلى وحدة التحكم. عناصر القائمة الأخرى المتعلقة بدرجة الحرارة مشابهة لهذا.

إعدادات عنصر قائمة التحكم في الصوت:


سيتم إخراج نصوص True و False إلى ValStr مع القيم المقابلة لعناصر القائمة.

إشارة مرجعية - "التحكم في القائمة":


يبدو أن كل شيء بديهي هنا.

إشارة مرجعية - "إدارة القيمة"



في وضع التغيير المحدد ، عندما تضغط لفترة وجيزة على زر تغيير القيمة ، فإنه يتغير حسب قيمة الخطوة المحددة. إذا استمر الضغط على هذا الزر لأكثر من ثانيتين ، فستتغير القيمة بقيمة الخطوة المحددة كل نصف ثانية. إذا واصلت الضغط على الزر لمدة ثانيتين أخريين ، ستنخفض فترة تغيير القيمة إلى 200 مللي ثانية.

علامة التبويب خروج


الإخراج "القائمة الرئيسية النشطة" ضروري لتوليد إشارة "تنشيط القائمة". اللوحان التاليان متطابقان تقريبًا ، ولا يحتاجان إلى تفسيرات خاصة.



سأنتبه فقط إلى مدخلات CanValUp لمجموعات MenuValue. عند مستوى عالٍ عند هذا الإدخال ، تتوافق القيمة عند الإخراج Q مع قيمة عنصر القائمة المحدد. على الطرف اللاحق لهذا الإدخال ، يتم "تجميد" القيمة عند الإخراج حتى يظهر مستوى مرتفع عند هذا الإدخال. يعد ذلك ضروريًا حتى لا تتغير القيمة حتى نهاية التحرير (إغلاق القائمة).

المجالس المتبقية بنفس البساطة ولا تحتاج إلى تفسير.



نتيجة تجميع المشروع
#include <LiquidCrystal.h>
#include <EEPROMex.h>
LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);
int _dispTempLength1 = 0;
boolean _isNeedClearDisp1;


struct UB_142171746
{
  bool ubo_101667604 = 0;
  bool ubo_51674151 = 0;
  bool ubo_137412502 = 0;
  bool ubo_174461762 = 0;
  bool ubo_157422683 = 0;
  int _gtv1 = 0;
  int _gtv2 = 0;
  int _gtv3 = 0;
  int _gtv4 = 0;
  int _gtv5 = 0;
  bool _bounse1S = 0;
  bool _bounse1O = 0;
  unsigned long _bounse1P = 0UL;
  bool _bounse2S = 0;
  bool _bounse2O = 0;
  unsigned long _bounse2P = 0UL;
  bool _bounse3S = 0;
  bool _bounse3O = 0;
  unsigned long _bounse3P = 0UL;
  bool _bounse4S = 0;
  bool _bounse4O = 0;
  unsigned long _bounse4P = 0UL;
  bool _bounse5S = 0;
  bool _bounse5O = 0;
  unsigned long _bounse5P = 0UL;
};
UB_142171746 UB_142171746_Instance1;
int UB_142171746_ubi_125089190 = 0;
const byte _menuParametrsArray[]  PROGMEM =  {1, 0, 0, 4, 5, 0, 0, 0, 0, 0, 6, 9, 0, 2, 0, 0, 6, 7, 0, 0, 0, 0, 0, 7, 9, 0, 3, 3, 1, 0, 0, 0, 10, 11, 1, 8, 3, 0, 0, 4, 4, 4, 0, 0, 1, 0, 0, 1, 4, 5, 0, 8, 5, 4, 3, 0, 0, 1, 0, 0, 1, 4, 4, 0, 8, 6, 4, 2, 0, 0, 2, 0, 0, 1, 4, 2, 0, 8, 7, 4, 1, 0, 0, 2, 0, 0, 1, 4, 1, 0, 8};
bool _menuValueArray_bool[1];
const bool _menuConstantValuesArray_bool[]  PROGMEM =  {1};
int _menuValueArray_int[4];
const int _menuConstantValuesArray_int[]  PROGMEM =  {1};
const char _flprogMenuNameString1[] PROGMEM = "Vent-Off";
const char _flprogMenuNameString2[] PROGMEM = "Vent-On";
const char _flprogMenuNameString3[] PROGMEM = "Sound";
const char _flprogMenuNameString4[] PROGMEM = "Heater-Off";
const char _flprogMenuNameString5[] PROGMEM = "Heater-On";
const char _flprogMenuNameString6[] PROGMEM = "HeaterSetting";
const char _flprogMenuNameString7[] PROGMEM = "Vent Setting";
const char _flprogMenuNameString8[] PROGMEM = "C";
const char _flprogMenuNameString9[] PROGMEM = "Enter to submenu";
const char _flprogMenuNameString10[] PROGMEM = "On";
const char _flprogMenuNameString11[] PROGMEM = "Off";
const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1,  _flprogMenuNameString2,  _flprogMenuNameString3,  _flprogMenuNameString4,  _flprogMenuNameString5,  _flprogMenuNameString6,  _flprogMenuNameString7,  _flprogMenuNameString8,  _flprogMenuNameString9,  _flprogMenuNameString10,  _flprogMenuNameString11};
struct _menuItemStricture {
  int startInArrayIndex;
};
struct _menuMainStricture {
  byte startIndex;
  byte stopIndex;
  bool isSwitchMenuAroundRing;
  _menuItemStricture  currentItem;
};
_menuItemStricture _MenuItems[7];
_menuMainStricture _MainMenus[1];
bool _gtv1;
bool _gtv2;
bool _gtv3;
bool _gtv4;
bool _gtv5;
bool _gtv6;
bool _gtv7;
bool _gtv8;
bool _gtv9;
bool _gtv10 = 0;
float _gtv11;
bool _gtv12 = 0;
String _swi2;
String _swi1;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
int _disp1oldLength = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
int _disp3oldLength = 0;
int Menu_Value_4_TVD = 0;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
int Menu_Value_2_TVD = 0;
int _disp4oldLength = 0;
bool _trgr4 = 0;
bool _trgr2 = 0;
bool _trgr1 = 0;
bool _trgr3 = 0;
String _MenuBlock_47814740_ASO_1;
String _MenuBlock_47814740_MNO;
String _MenuBlock_47814740_VNO;
bool _MenuBlock_47814740_OEIS = 0;
bool _MenuBlock_47814740_OMUIS = 0;
bool _MenuBlock_47814740_OMDIS = 0;
bool _MenuBlock_47814740_OEMIS = 0;
bool _MenuBlock_47814740_OExFMIS = 0;
bool _MenuBlock_47814740_OVUIS = 0;
bool _MenuBlock_47814740_OVDIS = 0;
unsigned long _MenuBlock_47814740_VUDST = 0UL;
unsigned long _MenuBlock_47814740_VUDSPT = 0UL;
byte _MenuBlock_47814740_VUDSM = 0;
int _MenuBlock_47814740_VUDPT = 0;
bool _MenuBlock_47814740_AMMO = 0;
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0UL;
bool _tim3I = 0;
bool _tim3O = 0;
unsigned long _tim3P = 0UL;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
int _disp2oldLength = 0;
int Menu_Value_3_TVD = 0;
int Menu_Value_1_TVD = 0;
void setup()
{
  if ((EEPROM.read(0)) != 98) {
    EEPROM.write(0, 98) ;
    EEPROM.updateInt(4, 40);
    EEPROM.updateInt(2, 30);
    EEPROM.updateBit(1, 0, 0);
    EEPROM.updateInt(6, 25);
    EEPROM.updateInt(8, 10);
  }
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);

  _lcd1.begin(16, 2);
  _MenuItems[0].startInArrayIndex = 0;
  _MenuItems[1].startInArrayIndex = 13;
  _MenuItems[2].startInArrayIndex = 26;
  _MenuItems[3].startInArrayIndex = 39;
  _MenuItems[4].startInArrayIndex = 52;
  _MenuItems[5].startInArrayIndex = 65;
  _MenuItems[6].startInArrayIndex = 78;
  _MainMenus[0].startIndex = 1;
  _MainMenus[0].isSwitchMenuAroundRing = 1;
  _MainMenus[0].stopIndex = 3;
  _MainMenus[0].currentItem = _MenuItems[0];
  _menuValueArray_int[0] = (EEPROM.readInt(2));
  _menuValueArray_int[1] = (EEPROM.readInt(4));
  _menuValueArray_bool[0] = (EEPROM.readBit(1, 0));
  _menuValueArray_int[2] = (EEPROM.readInt(6));
  _menuValueArray_int[3] = (EEPROM.readInt(8));
}
void loop()
{ bool _tempVariable_bool;
  byte _tempVariable_byte;
  if (_isNeedClearDisp1) {
    _lcd1.clear();
    _isNeedClearDisp1 = 0;
  }




  _gtv11 = (map(( (analogRead (1))), (0), (1023), (-20), (80)));
  UB_142171746_ubi_125089190 =  (analogRead (0));
  UB_142171746_Instance1 = _func_UB_142171746(UB_142171746_Instance1, UB_142171746_ubi_125089190, 96, 250, 402, 635);
  _gtv3 = UB_142171746_Instance1.ubo_101667604;
  _gtv4 = UB_142171746_Instance1.ubo_51674151;
  _gtv5 = UB_142171746_Instance1.ubo_137412502;
  _gtv2 = UB_142171746_Instance1.ubo_174461762;
  _gtv1 = UB_142171746_Instance1.ubo_157422683;
  if (_gtv1)
  {
    if (_tim1I) {
      if (_isTimer(_tim1P, 2000)) {
        _tim1O = 1;
      }
    } else {
      _tim1I = 1;
      _tim1P = millis();
    }
  } else {
    _tim1O = 0;
    _tim1I = 0;
  }
  if (_tim2O) _trgr2 = 0;
  if (_tim1O) _trgr2 = 1;
  if (_trgr2) {
    if (_trgrt3I) {
      _trgrt3 = 0;
    } else {
      _trgrt3 = 1;
      _trgrt3I = 1;
    }
  } else {
    _trgrt3 = 0;
    _trgrt3I = 0;
  };
  if (_trgrt1) {
    _tim2O = 1;
    _tim2I = 1;
  } else {
    if (_tim2I) {
      _tim2I = 0;
      _tim2P = millis();
    } else {
      if (_tim2O) {
        if ( _isTimer(_tim2P, 200)) _tim2O = 0;
      }
    }
  }
  if (!(_gtv1)) {
    if (_trgrt1I) {
      _trgrt1 = 0;
    } else {
      _trgrt1 = 1;
      _trgrt1I = 1;
    }
  } else {
    _trgrt1 = 0;
    _trgrt1I = 0;
  };
  _gtv8 = _trgrt3;
  _gtv7 = ( (!(_trgr2)) && (_trgrt1) );
  if (1)
  {
    if (_tim3I) {
      if (_isTimer(_tim3P, 200)) {
        _tim3O = 1;
      }
    } else {
      _tim3I = 1;
      _tim3P = millis();
    }
  } else {
    _tim3O = 0;
    _tim3I = 0;
  }
  if (!(_gtv7)) {
    if (_trgrt2I) {
      _trgrt2 = 0;
    } else {
      _trgrt2 = 1;
      _trgrt2I = 1;
    }
  } else {
    _trgrt2 = 0;
    _trgrt2I = 0;
  };
  if (( (_gtv9) && (_gtv8) )) _trgr1 = 0;
  if (( (_tim3O) && (_trgrt2) )) _trgr1 = 1;
  _gtv6 = _trgr1;
  if (_gtv6) {
    _tempVariable_bool  =  1;
    if ( ! _MenuBlock_47814740_OEIS ) {
      _MenuBlock_47814740_OEIS = 1;
      _MainMenus[0].currentItem = _MenuItems[0];
    }
    _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem ).startInArrayIndex) + 10]);
    _MenuBlock_47814740_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    _MenuBlock_47814740_VNO = _menuOutputValueString (0);
    _MenuBlock_47814740_AMMO = (pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem ).startInArrayIndex) + 5]) ) == 0;
    _tempVariable_byte  =  pgm_read_byte(&_menuParametrsArray[(((_MainMenus[0]).currentItem).startInArrayIndex) + 12]);
    if (_tempVariable_byte == 0 ) {
      _MenuBlock_47814740_ASO_1 =  "";
    } else {
      _MenuBlock_47814740_ASO_1 =  _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    }
  } else {
    _tempVariable_bool  =  0;
    if (_MenuBlock_47814740_OEIS) {
      _MenuBlock_47814740_OEIS = 0;
      _menuUpdateToEEpromItems();
    }
    _MenuBlock_47814740_AMMO = 0;
    _MenuBlock_47814740_ASO_1 =  "";
    _MenuBlock_47814740_MNO = "";
    _MenuBlock_47814740_VNO = "";
  }
  if (_gtv4) {
    if ( ! _MenuBlock_47814740_OMUIS) {
      _MenuBlock_47814740_OMUIS = 1; if (_tempVariable_bool) {
        _menuUpEvents(0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OMUIS = 0;
  }
  if (_gtv5) {
    if ( ! _MenuBlock_47814740_OMDIS) {
      _MenuBlock_47814740_OMDIS = 1; if (_tempVariable_bool) {
        _menuDownEvents(0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OMDIS = 0;
  }
  if (( (_gtv7) && (_gtv6) )) {
    if ( ! _MenuBlock_47814740_OEMIS) {
      _MenuBlock_47814740_OEMIS = 1; if (_tempVariable_bool) {
        _menuEnterTheMenuEvents (0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OEMIS = 0;
  }
  if (_gtv8) {
    if ( ! _MenuBlock_47814740_OExFMIS) {
      _MenuBlock_47814740_OExFMIS = 1; if (_tempVariable_bool) {
        _menuExitFromMenuEvents (0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OExFMIS = 0;
  }
  if (_gtv3) {
    if ( ! _MenuBlock_47814740_OVUIS) {
      _MenuBlock_47814740_OVUIS = 1;
      if (_tempVariable_bool) {
        _valueUpEvents(0);
        _MenuBlock_47814740_VUDST = millis();
      }
    } if (_tempVariable_bool) {
      if (_MenuBlock_47814740_VUDSM == 0) {
        if (_isTimer(_MenuBlock_47814740_VUDST , 2000 )) {
          _MenuBlock_47814740_VUDSM = 1;
          _MenuBlock_47814740_VUDSPT = millis();
          _MenuBlock_47814740_VUDPT  = 500;
        }
      }  else {
        if (_MenuBlock_47814740_VUDSM == 1) {
          if (_isTimer(_MenuBlock_47814740_VUDST , 4000 )) {
            _MenuBlock_47814740_VUDSM = 2;
            _MenuBlock_47814740_VUDPT  = 200;
          }
        } if (_isTimer(_MenuBlock_47814740_VUDSPT , _MenuBlock_47814740_VUDPT )) {
          _valueUpEvents(0);
          _MenuBlock_47814740_VUDSPT = millis();
        }
      }
    }
  } else {
    _MenuBlock_47814740_OVUIS = 0;
    if ( ! ( _gtv2)) {
      _MenuBlock_47814740_VUDSM = 0;
    }
  }
  if (_gtv2) {
    if ( ! _MenuBlock_47814740_OVDIS) {
      _MenuBlock_47814740_OVDIS = 1;
      if (_tempVariable_bool) {
        _valueDownEvents(0);
        _MenuBlock_47814740_VUDST = millis();
      }
    } if (_tempVariable_bool) {
      if (_MenuBlock_47814740_VUDSM == 0) {
        if (_isTimer(_MenuBlock_47814740_VUDST , 2000 )) {
          _MenuBlock_47814740_VUDSM = 1;
          _MenuBlock_47814740_VUDSPT = millis();
          _MenuBlock_47814740_VUDPT  = 500;
        }
      }  else {
        if (_MenuBlock_47814740_VUDSM == 1) {
          if (_isTimer(_MenuBlock_47814740_VUDST , 4000 )) {
            _MenuBlock_47814740_VUDSM = 2;
            _MenuBlock_47814740_VUDPT  = 200;
          }
        } if (_isTimer(_MenuBlock_47814740_VUDSPT , _MenuBlock_47814740_VUDPT )) {
          _valueDownEvents(0);
          _MenuBlock_47814740_VUDSPT = millis();
        }
      }
    }
  } else {
    _MenuBlock_47814740_OVDIS = 0;
    if ( ! ( _gtv3)) {
      _MenuBlock_47814740_VUDSM = 0;
    }
  }
  if (_gtv6) {
    _dispTempLength1 = ((_MenuBlock_47814740_MNO)).length();
    if (_disp2oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp2oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1) / 2), 0);
    _lcd1.print((_MenuBlock_47814740_MNO));
  } else {
    if (_disp2oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp2oldLength = 0;
    }
  }
  if (_gtv6) {
    _dispTempLength1 = ((((_MenuBlock_47814740_VNO) + (String(" ")) + (_MenuBlock_47814740_ASO_1)))).length();
    if (_disp1oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp1oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1) / 2), 1);
    _lcd1.print((((_MenuBlock_47814740_VNO) + (String(" ")) + (_MenuBlock_47814740_ASO_1))));
  } else {
    if (_disp1oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp1oldLength = 0;
    }
  }
  _gtv9 = _MenuBlock_47814740_AMMO;
  if ((_gtv11) > (Menu_Value_2_TVD)) _trgr3 = 0;
  if ((_gtv11) < (Menu_Value_1_TVD)) _trgr3 = 1;
  digitalWrite(2, !(_trgr3));
  if (!(_gtv6)) {
    Menu_Value_1_TVD = _menuValueArray_int[3];
  }
  _gtv10 = _trgr3;
  if (!(_gtv6)) {
    Menu_Value_2_TVD = _menuValueArray_int[2];
  }
  if ((_gtv11) < (Menu_Value_4_TVD)) _trgr4 = 0;
  if ((_gtv11) > (Menu_Value_3_TVD)) _trgr4 = 1;
  if (!(_gtv6)) {
    Menu_Value_3_TVD = _menuValueArray_int[1];
  }
  digitalWrite(3, !(_trgr4));
  _gtv12 = _trgr4;
  if (!(_gtv6)) {
    Menu_Value_4_TVD = _menuValueArray_int[0];
  }
  digitalWrite(11, ( (( (_gtv12) || (_gtv10) )) && ((_menuValueArray_bool[0])) ));
  if (_gtv10)
  {
    _swi1 = String("H - ON");
  }
  else
  {
    _swi1 = String("H - OFF");
  }
  if (_gtv12)
  {
    _swi2 = String("V - ON");
  }
  else
  {
    _swi2 = String("V - OFF");
  }
  if (!(_gtv6)) {
    _dispTempLength1 = ((((String("Temp - ")) + (( _floatToStringWitRaz(_gtv11, 2))) + (String(" C"))))).length();
    if (_disp3oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp3oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1) / 2), 0);
    _lcd1.print((((String("Temp - ")) + (( _floatToStringWitRaz(_gtv11, 2))) + (String(" C")))));
  } else {
    if (_disp3oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp3oldLength = 0;
    }
  }
  if (!(_gtv6)) {
    _dispTempLength1 = ((((_swi1) + (String("  ")) + (_swi2)))).length();
    if (_disp4oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp4oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1) / 2), 1);
    _lcd1.print((((_swi1) + (String("  ")) + (_swi2))));
  } else {
    if (_disp4oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp4oldLength = 0;
    }
  }




}
String  _floatToStringWitRaz(float value, int raz)
{

  return String(value, raz);
}
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));
  }
}
void _menuUpEvents (byte menuIndex)
{
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  byte parentStartIndex;
  byte parentStopIndex;
  if (parIndex == 0) {
    parentStartIndex = (_MainMenus[menuIndex]).startIndex;
    parentStopIndex = (_MainMenus[menuIndex]).stopIndex;
  }
  else {
    parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 3]);
    parentStopIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 4]);
  }
  if (tempIndex == parentStartIndex) {
    if ((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {
      (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStopIndex - 1];
      return;
    } else {
      return;
    }
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex - 2];
  return;
}
void _menuDownEvents (byte menuIndex)
{
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  byte parentStartIndex;
  byte parentStopIndex;
  if (parIndex == 0) {
    parentStartIndex = (_MainMenus[menuIndex]).startIndex;
    parentStopIndex = (_MainMenus[menuIndex]).stopIndex;
  }
  else {
    parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 3]);
    parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex - 1]).startInArrayIndex) + 4]);
  }
  if (tempIndex == parentStopIndex) {
    if ((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {
      (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStartIndex - 1];
      return;
    } else {
      return;
    }
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex];
  return;
}
void _valueUpEvents (byte menuIndex)
{
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 6]);
  byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 8]);
  if (itemType == 3) {
    _menuValueArray_bool[valIndex - 1 ] = 1;
    return;
  }
  if (itemType == 4) {
    _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] + (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1]));
  }
}
void _valueDownEvents (byte menuIndex)
{

  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 7]);
  byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 8]);
  if (itemType == 3) {
    _menuValueArray_bool[valIndex - 1] = 0;
    return;
  }
  if (itemType == 4) {
    _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] - (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1]));
  }
}
void _menuEnterTheMenuEvents (byte menuIndex)
{
  byte itemType =  pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  if (!(itemType == 0)) {
    return;
  }
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte newIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[tempIndex - 1]).startInArrayIndex) + 3]);
  if (newIndex == 0) {
    return;
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[newIndex - 1];
  return;
}
void _menuExitFromMenuEvents (byte menuIndex)
{
  byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  if (parIndex == 0) {
    return;
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[parIndex - 1];
  return;
}
String _menuOutputValueString (byte menuIndex)
{
  byte itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte valueStrIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 11]);
  if (itemType == 0) {
    if ( valueStrIndex == 0) {
      return "";
    } else {
      return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[valueStrIndex - 1])));
    }
  }
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 7]);
  byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 6]);
  if ( valIndex == 0) {
    return "";
  }
  byte convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 9]);
  if (itemType == 3) {
    return _convertBoolean(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  if (itemType == 4) {
    return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  return "";
}
void _menuUpdateToEEpromItems()
{
  EEPROM.updateInt(2, (_menuValueArray_int[0]));
  EEPROM.updateInt(4, (_menuValueArray_int[1]));
  EEPROM.updateBit(1, 0, (_menuValueArray_bool[0]));
  EEPROM.updateInt(6, (_menuValueArray_int[2]));
  EEPROM.updateInt(8, (_menuValueArray_int[3]));
}
String _readStringFromProgmem (char *string)
{
  String result = String("");
  while (pgm_read_byte(string) != '\0')
  {
    result = result + char(pgm_read_byte(string));
    string++;
  }
  return result;
}
String _convertNamber(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)
{
  if (itemType == 4) {
    if (convFormat == 4) {
      return String((_menuValueArray_int[valIndex - 1 ]), DEC);
    }
    if (convFormat == 5) {
      return String((_menuValueArray_int[valIndex - 1]), HEX);
    }
    if (convFormat == 6) {
      return String((_menuValueArray_int[valIndex - 1]), BIN);
    }
  }
}
String _convertBoolean(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)
{
  if (convFormat == 1) {
    if (_menuValueArray_bool[valIndex - 1]) {
      return "1";
    } else {
      return "0";
    }
  }
  if (convFormat == 2) {
    if (_menuValueArray_bool[valIndex - 1]) {
      return "True";
    } else {
      return "False";
    }
  }
  if (convFormat == 3) {
    if (_menuValueArray_bool[valIndex - 1 ]) {
      return "";
    } else {
      return "";
    }
  }
  if (_menuValueArray_bool[valIndex - 1]) {
    return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMax - 1])));
  } else {
    return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMin - 1])));
  }
}
struct UB_142171746 _func_UB_142171746(struct UB_142171746 _ubInstans, int ubi_125089190, int ubpar_125440348, int ubpar_79146376, int ubpar_175158211, int ubpar_40719224)
{
  bool ubo_101667604 = _ubInstans.ubo_101667604;
  bool ubo_51674151 = _ubInstans.ubo_51674151;
  bool ubo_137412502 = _ubInstans.ubo_137412502;
  bool ubo_174461762 = _ubInstans.ubo_174461762;
  bool ubo_157422683 = _ubInstans.ubo_157422683;
  int _gtv1 = _ubInstans._gtv1;
  int _gtv2 = _ubInstans._gtv2;
  int _gtv3 = _ubInstans._gtv3;
  int _gtv4 = _ubInstans._gtv4;
  int _gtv5 = _ubInstans._gtv5;
  bool _bounse1S = _ubInstans._bounse1S;
  bool _bounse1O = _ubInstans._bounse1O;
  unsigned long _bounse1P = _ubInstans._bounse1P;
  bool _bounse2S = _ubInstans._bounse2S;
  bool _bounse2O = _ubInstans._bounse2O;
  unsigned long _bounse2P = _ubInstans._bounse2P;
  bool _bounse3S = _ubInstans._bounse3S;
  bool _bounse3O = _ubInstans._bounse3O;
  unsigned long _bounse3P = _ubInstans._bounse3P;
  bool _bounse4S = _ubInstans._bounse4S;
  bool _bounse4O = _ubInstans._bounse4O;
  unsigned long _bounse4P = _ubInstans._bounse4P;
  bool _bounse5S = _ubInstans._bounse5S;
  bool _bounse5O = _ubInstans._bounse5O;
  unsigned long _bounse5P = _ubInstans._bounse5P;
  bool   _bounceTmpD1 = (ubi_125089190) < (_gtv1);

  if (_bounse1S)
  {
    if (millis() >= (_bounse1P + 40))
    {
      _bounse1O =  _bounceTmpD1;
      _bounse1S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD1 != _bounse1O )
    {
      _bounse1S = 1;
      _bounse1P = millis();
    }
  }
  bool   _bounceTmpD2 = ( ((ubi_125089190) > (_gtv1)) && ((ubi_125089190) < (_gtv2)) );

  if (_bounse2S)
  {
    if (millis() >= (_bounse2P + 40))
    {
      _bounse2O =  _bounceTmpD2;
      _bounse2S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD2 != _bounse2O )
    {
      _bounse2S = 1;
      _bounse2P = millis();
    }
  }
  bool   _bounceTmpD3 = ( ((ubi_125089190) > (_gtv2)) && ((ubi_125089190) < (_gtv3)) );

  if (_bounse3S)
  {
    if (millis() >= (_bounse3P + 40))
    {
      _bounse3O =  _bounceTmpD3;
      _bounse3S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD3 != _bounse3O )
    {
      _bounse3S = 1;
      _bounse3P = millis();
    }
  }
  bool   _bounceTmpD4 = ( ((ubi_125089190) > (_gtv3)) && ((ubi_125089190) < (_gtv4)) );

  if (_bounse4S)
  {
    if (millis() >= (_bounse4P + 40))
    {
      _bounse4O =  _bounceTmpD4;
      _bounse4S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD4 != _bounse4O )
    {
      _bounse4S = 1;
      _bounse4P = millis();
    }
  }
  bool   _bounceTmpD5 = ( ((ubi_125089190) > (_gtv4)) && ((ubi_125089190) < (_gtv5)) );

  if (_bounse5S)
  {
    if (millis() >= (_bounse5P + 40))
    {
      _bounse5O =  _bounceTmpD5;
      _bounse5S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD5 != _bounse5O )
    {
      _bounse5S = 1;
      _bounse5P = millis();
    }
  }
  _gtv1 = (ubpar_125440348) / (2);
  _gtv2 = (((ubpar_79146376) - (ubpar_125440348)) / (2)) + (ubpar_125440348);
  _gtv3 = (((ubpar_175158211) - (ubpar_79146376)) / (2)) + (ubpar_79146376);
  _gtv4 = (((ubpar_40719224) - (ubpar_175158211)) / (2)) + (ubpar_175158211);
  _gtv5 = (((1023) - (ubpar_40719224)) / (2)) + (ubpar_40719224);
  ubo_101667604 = _bounse1O;
  ubo_51674151 = _bounse2O;
  ubo_137412502 = _bounse3O;
  ubo_174461762 = _bounse4O;
  ubo_157422683 = _bounse5O;
  _ubInstans.ubo_101667604 = ubo_101667604;
  _ubInstans.ubo_51674151 = ubo_51674151;
  _ubInstans.ubo_137412502 = ubo_137412502;
  _ubInstans.ubo_174461762 = ubo_174461762;
  _ubInstans.ubo_157422683 = ubo_157422683;
  _ubInstans._gtv1 = _gtv1;
  _ubInstans._gtv2 = _gtv2;
  _ubInstans._gtv3 = _gtv3;
  _ubInstans._gtv4 = _gtv4;
  _ubInstans._gtv5 = _gtv5;
  _ubInstans._bounse1S = _bounse1S;
  _ubInstans._bounse1O = _bounse1O;
  _ubInstans._bounse1P = _bounse1P;
  _ubInstans._bounse2S = _bounse2S;
  _ubInstans._bounse2O = _bounse2O;
  _ubInstans._bounse2P = _bounse2P;
  _ubInstans._bounse3S = _bounse3S;
  _ubInstans._bounse3O = _bounse3O;
  _ubInstans._bounse3P = _bounse3P;
  _ubInstans._bounse4S = _bounse4S;
  _ubInstans._bounse4O = _bounse4O;
  _ubInstans._bounse4P = _bounse4P;
  _ubInstans._bounse5S = _bounse5S;
  _ubInstans._bounse5O = _bounse5O;
  _ubInstans._bounse5P = _bounse5P;
  return _ubInstans;
}

الآن قليلا "ضخ" المشروع. استبدل درع لوحة المفاتيح LCD بلوحة مفاتيح مصفوفة 4 × 4 وشاشة 4 × 4 متصلة عبر I2C.



سيسمح لك ذلك بتعيين القيمة ليس خطوة بخطوة ، ولكن ببساطة عن طريق إدخال أرقام. بالإضافة إلى ذلك ، سيسمح لك هذا بالدخول إلى القائمة بكلمة مرور. مخطط تصميم متغير.



المشروع كله.
image

خذ بعين الاعتبار الألواح المعدلة ، حيث



يتم استخدام وحدة استقصاء لوحة مفاتيح مصفوفة قياسية من مكتبة العناصر.



عند الضغط على زر "*" ، يتم تنشيط القائمة. هذه المرة فقط ، ليست القائمة الرئيسية ، ولكن القائمة لإدخال كلمة المرور.



إعدادات قائمة



كلمة المرور تتكون هذه القائمة من عنصر واحد يستخدم لإدخال كلمة مرور. يتم استخدام نوع Long Integer لزيادة عدد أحرف كلمة المرور.



في هذا المنتدى ، يتم إدخال كلمة المرور بشكل صحيح. إذا كانت كلمة المرور المدخلة وكلمة المرور المحفوظة في القائمة الرئيسية متطابقة ، يتم تشغيل القائمة الرئيسية. عند الخروج من القائمة ، تتم كتابة 0 إلى قيمة كلمة المرور التي تم إدخالها (التحضير للإدخال التالي)



تمت إضافة عنصر إلى شجرة القائمة الرئيسية لتكوين كلمة المرور المحفوظة.



أيضا ، لمست التغييرات علامة التبويب "إدارة القيمة"



تمت ترجمة التحكم في القيمة إلى إدخال أرقام مباشرة. لم تتغير الألواح المتبقية.

نتيجة تجميع المشروع
#include <Wire.h>
#include <EEPROMex.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd2(0x27, 20, 4);
int _dispTempLength2 = 0;
boolean _isNeedClearDisp2;



const byte _menuParametrsArray[]  PROGMEM =  {1, 5, 1, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0, 2, 0, 0, 6, 7, 0, 0, 0, 0, 0, 8, 11, 0, 3, 0, 0, 8, 9, 0, 0, 0, 0, 0, 6, 11, 0, 4, 3, 1, 0, 0, 0, 12, 13, 1, 8, 3, 0, 0, 5, 5, 2, 0, 0, 0, 0, 0, 1, 4, 2, 0, 0, 6, 4, 2, 0, 0, 2, 0, 0, 1, 4, 5, 0, 10, 7, 4, 4, 0, 0, 2, 0, 0, 1, 4, 9, 0, 10, 8, 4, 3, 0, 0, 3, 0, 0, 1, 4, 7, 0, 10, 9, 4, 1, 0, 0, 3, 0, 0, 1, 4, 4, 0, 10};
bool _menuValueArray_bool[1];
const bool _menuConstantValuesArray_bool[]  PROGMEM =  {1};
int _menuValueArray_int[4];
const int _menuConstantValuesArray_int[]  PROGMEM =  {1};
long _menuValueArray_long[2];
const long _menuConstantValuesArray_long[]  PROGMEM =  {1};
const char _flprogMenuNameString1[] PROGMEM = "Enter Password";
const char _flprogMenuNameString2[] PROGMEM = "ChangePassword";
const char _flprogMenuNameString3[] PROGMEM = "Sound";
const char _flprogMenuNameString4[] PROGMEM = "Vent-Off";
const char _flprogMenuNameString5[] PROGMEM = "Heater-On";
const char _flprogMenuNameString6[] PROGMEM = "Vent Setting";
const char _flprogMenuNameString7[] PROGMEM = "Vent-On";
const char _flprogMenuNameString8[] PROGMEM = "HeaterSetting";
const char _flprogMenuNameString9[] PROGMEM = "Heater-Off";
const char _flprogMenuNameString10[] PROGMEM = "C";
const char _flprogMenuNameString11[] PROGMEM = "Enter to submenu";
const char _flprogMenuNameString12[] PROGMEM = "On";
const char _flprogMenuNameString13[] PROGMEM = "Off";
const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1,  _flprogMenuNameString2,  _flprogMenuNameString3,  _flprogMenuNameString4,  _flprogMenuNameString5,  _flprogMenuNameString6,  _flprogMenuNameString7,  _flprogMenuNameString8,  _flprogMenuNameString9,  _flprogMenuNameString10,  _flprogMenuNameString11,  _flprogMenuNameString12,  _flprogMenuNameString13};
struct _menuItemStricture {
  int startInArrayIndex;
};
struct _menuMainStricture {
  String tempString;
  byte startIndex;
  byte stopIndex;
  bool isSwitchMenuAroundRing;
  _menuItemStricture  currentItem;
};
_menuItemStricture _MenuItems[9];
_menuMainStricture _MainMenus[2];
bool _gtv6;
bool _gtv10 = 0;
float _gtv11;
bool _gtv12 = 0;
bool _gtv1;
bool _gtv2;
bool _gtv3;
bool _gtv4;
bool _gtv5;
bool _gtv13;
bool _gtv14;
bool _gtv15;
bool _gtv16;
bool _gtv17;
bool _gtv18;
bool _gtv19;
bool _gtv20;
bool _gtv21;
bool _gtv22;
bool _gtv23;
bool _gtv7;
bool _gtv8;
int _disp1oldLength = 0;
int Menu_Value_4_TVD = 0;
int Menu_Value_2_TVD = 0;
bool _trgr4 = 0;
String _swi1;
bool _trgr1 = 0;
bool _trgr3 = 0;
int _disp2oldLength = 0;
bool _trgt1 = 0;
bool _trgt1I = 0;
int Menu_Value_3_TVD = 0;
String _MenuBlock_47814740_ASO_1;
String _MenuBlock_47814740_MNO;
String _MenuBlock_47814740_VNO;
bool _MenuBlock_47814740_OEIS = 0;
bool _MenuBlock_47814740_OMUIS = 0;
bool _MenuBlock_47814740_OMDIS = 0;
bool _MenuBlock_47814740_OEMIS = 0;
bool _MenuBlock_47814740_OExFMIS = 0;
bool _MenuBlock_47814740_IDI_0 = 0;
bool _MenuBlock_47814740_IDI_1 = 0;
bool _MenuBlock_47814740_IDI_2 = 0;
bool _MenuBlock_47814740_IDI_3 = 0;
bool _MenuBlock_47814740_IDI_4 = 0;
bool _MenuBlock_47814740_IDI_5 = 0;
bool _MenuBlock_47814740_IDI_6 = 0;
bool _MenuBlock_47814740_IDI_7 = 0;
bool _MenuBlock_47814740_IDI_8 = 0;
bool _MenuBlock_47814740_IDI_9 = 0;
bool _MenuBlock_47814740MinusIOS = 0;
int Menu_Value_1_TVD = 0;
bool _mkb1C1xP1 = 0;
bool _mkb1C1xP2 = 0;
bool _mkb1C1xP3 = 0;
bool _mkb1C1xP4 = 0;
bool _mkb1C2xP1 = 0;
bool _mkb1C2xP2 = 0;
bool _mkb1C2xP3 = 0;
bool _mkb1C2xP4 = 0;
bool _mkb1C3xP1 = 0;
bool _mkb1C3xP2 = 0;
bool _mkb1C3xP3 = 0;
bool _mkb1C3xP4 = 0;
bool _mkb1C4xP1 = 0;
bool _mkb1C4xP2 = 0;
bool _mkb1C4xP3 = 0;
bool _mkb1C4xP4 = 0;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
int _disp6oldLength = 0;
int _disp4oldLength = 0;
int _disp5oldLength = 0;
String _MenuBlock_360159546_MNO;
String _MenuBlock_360159546_VNO;
bool _MenuBlock_360159546_OEIS = 0;
bool _MenuBlock_360159546_IDI_0 = 0;
bool _MenuBlock_360159546_IDI_1 = 0;
bool _MenuBlock_360159546_IDI_2 = 0;
bool _MenuBlock_360159546_IDI_3 = 0;
bool _MenuBlock_360159546_IDI_4 = 0;
bool _MenuBlock_360159546_IDI_5 = 0;
bool _MenuBlock_360159546_IDI_6 = 0;
bool _MenuBlock_360159546_IDI_7 = 0;
bool _MenuBlock_360159546_IDI_8 = 0;
bool _MenuBlock_360159546_IDI_9 = 0;
int _disp7oldLength = 0;
int _disp3oldLength = 0;
String _swi2;
void setup()
{
  if ((EEPROM.read(0)) != 99) {
    EEPROM.write(0, 99) ;
    EEPROM.updateInt(12, 25);
    EEPROM.updateLong(2, 123456);
    EEPROM.updateInt(6, 30);
    EEPROM.updateInt(10, 40);
    EEPROM.updateBit(1, 0, 0);
    EEPROM.updateInt(8, 10);
  }
  Wire.begin();
  pinMode(16, OUTPUT);
  pinMode(15, OUTPUT);
  pinMode(17, OUTPUT);

  _lcd2.init();
  _lcd2.backlight();
  pinMode(6, INPUT);
  digitalWrite(6, HIGH);
  pinMode(7, INPUT);
  digitalWrite(7, HIGH);
  pinMode(8, INPUT);
  digitalWrite(8, HIGH);
  pinMode(9, INPUT);
  digitalWrite(9, HIGH);
  pinMode(2, OUTPUT);
  digitalWrite(2, HIGH);
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH);
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
  _MenuItems[0].startInArrayIndex = 0;
  _MenuItems[1].startInArrayIndex = 13;
  _MenuItems[2].startInArrayIndex = 26;
  _MenuItems[3].startInArrayIndex = 39;
  _MenuItems[4].startInArrayIndex = 52;
  _MenuItems[5].startInArrayIndex = 65;
  _MenuItems[6].startInArrayIndex = 78;
  _MenuItems[7].startInArrayIndex = 91;
  _MenuItems[8].startInArrayIndex = 104;
  _MainMenus[0].tempString = "";
  _MainMenus[0].startIndex = 1;
  _MainMenus[0].isSwitchMenuAroundRing = 0;
  _MainMenus[0].stopIndex = 1;
  _MainMenus[0].currentItem = _MenuItems[0];
  _MainMenus[1].tempString = "";
  _MainMenus[1].startIndex = 2;
  _MainMenus[1].isSwitchMenuAroundRing = 1;
  _MainMenus[1].stopIndex = 5;
  _MainMenus[1].currentItem = _MenuItems[1];
  _menuValueArray_long[1] = (EEPROM.readLong(2));
  _menuValueArray_bool[0] = (EEPROM.readBit(1, 0));
  _menuValueArray_int[0] = (EEPROM.readInt(6));
  _menuValueArray_int[1] = (EEPROM.readInt(8));
  _menuValueArray_int[2] = (EEPROM.readInt(10));
  _menuValueArray_int[3] = (EEPROM.readInt(12));
}
void loop()
{ bool _tempVariable_bool;
  byte _tempVariable_byte;
  if (_isNeedClearDisp2) {
    _lcd2.clear();
    _isNeedClearDisp2 = 0;
  }




  _gtv11 = (map(( (analogRead (0))), (0), (1023), (-20), (80)));
  digitalWrite(2, 0);
  _mkb1C1xP1 = ! (digitalRead(6));
  _mkb1C1xP2 = ! (digitalRead(7));
  _mkb1C1xP3 = ! (digitalRead(8));
  _mkb1C1xP4 = ! (digitalRead(9));
  digitalWrite(2, 1);
  digitalWrite(3, 0);
  _mkb1C2xP1 = ! (digitalRead(6));
  _mkb1C2xP2 = ! (digitalRead(7));
  _mkb1C2xP3 = ! (digitalRead(8));
  _mkb1C2xP4 = ! (digitalRead(9));
  digitalWrite(3, 1);
  digitalWrite(4, 0);
  _mkb1C3xP1 = ! (digitalRead(6));
  _mkb1C3xP2 = ! (digitalRead(7));
  _mkb1C3xP3 = ! (digitalRead(8));
  _mkb1C3xP4 = ! (digitalRead(9));
  digitalWrite(4, 1);
  digitalWrite(5, 0);
  _mkb1C4xP1 = ! (digitalRead(6));
  _mkb1C4xP2 = ! (digitalRead(7));
  _mkb1C4xP3 = ! (digitalRead(8));
  _mkb1C4xP4 = ! (digitalRead(9));
  digitalWrite(5, 1);
  _gtv1 = _mkb1C1xP1;
  _gtv2 = _mkb1C1xP2;
  _gtv3 = _mkb1C1xP3;
  _gtv18 = _mkb1C1xP4;
  _gtv4 = _mkb1C2xP1;
  _gtv5 = _mkb1C2xP2;
  _gtv13 = _mkb1C2xP3;
  _gtv19 = _mkb1C2xP4;
  _gtv14 = _mkb1C3xP1;
  _gtv15 = _mkb1C3xP2;
  _gtv16 = _mkb1C3xP3;
  _gtv20 = _mkb1C3xP4;
  _gtv23 = _mkb1C4xP1;
  _gtv17 = _mkb1C4xP2;
  _gtv22 = _mkb1C4xP3;
  _gtv21 = _mkb1C4xP4;
  bool  _tmp1 = _gtv23;
  if (_tmp1)  {
    if (! _trgt1I) _trgt1 = ! _trgt1;
  }
  _trgt1I = _tmp1;
  _gtv6 = _trgt1;
  if (_gtv7) {
    _tempVariable_bool  =  1;
    if ( ! _MenuBlock_360159546_OEIS ) {
      _MenuBlock_360159546_OEIS = 1;
      (_MainMenus[0]).tempString = "";
    }
    _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem ).startInArrayIndex) + 10]);
    _MenuBlock_360159546_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    _MenuBlock_360159546_VNO = _menuOutputValueString (0);
  } else {
    _tempVariable_bool  =  0;
    if (_MenuBlock_360159546_OEIS) {
      _MenuBlock_360159546_OEIS = 0;
      _menuUpdateToEEpromItems();
    }
    _MenuBlock_360159546_MNO = "";
    _MenuBlock_360159546_VNO = "";
  }
  if (_gtv17) {
    if ( ! _MenuBlock_360159546_IDI_0) {
      _MenuBlock_360159546_IDI_0 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '0');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_0 = 0;
  }
  if (_gtv1) {
    if ( ! _MenuBlock_360159546_IDI_1) {
      _MenuBlock_360159546_IDI_1 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '1');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_1 = 0;
  }
  if (_gtv2) {
    if ( ! _MenuBlock_360159546_IDI_2) {
      _MenuBlock_360159546_IDI_2 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '2');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_2 = 0;
  }
  if (_gtv3) {
    if ( ! _MenuBlock_360159546_IDI_3) {
      _MenuBlock_360159546_IDI_3 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '3');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_3 = 0;
  }
  if (_gtv4) {
    if ( ! _MenuBlock_360159546_IDI_4) {
      _MenuBlock_360159546_IDI_4 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '4');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_4 = 0;
  }
  if (_gtv5) {
    if ( ! _MenuBlock_360159546_IDI_5) {
      _MenuBlock_360159546_IDI_5 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '5');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_5 = 0;
  }
  if (_gtv13) {
    if ( ! _MenuBlock_360159546_IDI_6) {
      _MenuBlock_360159546_IDI_6 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '6');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_6 = 0;
  }
  if (_gtv14) {
    if ( ! _MenuBlock_360159546_IDI_7) {
      _MenuBlock_360159546_IDI_7 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '7');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_7 = 0;
  }
  if (_gtv15) {
    if ( ! _MenuBlock_360159546_IDI_8) {
      _MenuBlock_360159546_IDI_8 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '8');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_8 = 0;
  }
  if (_gtv16) {
    if ( ! _MenuBlock_360159546_IDI_9) {
      _MenuBlock_360159546_IDI_9 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '9');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_9 = 0;
  }
  if (_gtv7) {
    _dispTempLength2 = ((_MenuBlock_360159546_MNO)).length();
    if (_disp6oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp6oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 0);
    _lcd2.print((_MenuBlock_360159546_MNO));
  } else {
    if (_disp6oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp6oldLength = 0;
    }
  }
  if (_gtv7) {
    _dispTempLength2 = ((_MenuBlock_360159546_VNO)).length();
    if (_disp7oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp7oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 1);
    _lcd2.print((_MenuBlock_360159546_VNO));
  } else {
    if (_disp7oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp7oldLength = 0;
    }
  }
  if (_trgrt1) _trgr1 = 0;
  if (((_menuValueArray_long[0])) == ((_menuValueArray_long[1]))) _trgr1 = 1;
  if (!(_gtv6)) {
    if (_trgrt1I) {
      _trgrt1 = 0;
    } else {
      _trgrt1 = 1;
      _trgrt1I = 1;
    }
  } else {
    _trgrt1 = 0;
    _trgrt1I = 0;
  };
  _gtv7 = ( (_gtv6) && (!(_trgr1)) );
  _gtv8 = ( (_trgr1) && (_gtv6) );
  if (_trgrt1) {
    _menuValueArray_long[0] = 0L;
  }
  if (_gtv8) {
    _tempVariable_bool  =  1;
    if ( ! _MenuBlock_47814740_OEIS ) {
      _MenuBlock_47814740_OEIS = 1;
      _MainMenus[1].currentItem = _MenuItems[1];
      (_MainMenus[1]).tempString = "";
    }
    _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[1].currentItem ).startInArrayIndex) + 10]);
    _MenuBlock_47814740_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    _MenuBlock_47814740_VNO = _menuOutputValueString (1);
    _tempVariable_byte  =  pgm_read_byte(&_menuParametrsArray[(((_MainMenus[1]).currentItem).startInArrayIndex) + 12]);
    if (_tempVariable_byte == 0 ) {
      _MenuBlock_47814740_ASO_1 =  "";
    } else {
      _MenuBlock_47814740_ASO_1 =  _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    }
  } else {
    _tempVariable_bool  =  0;
    if (_MenuBlock_47814740_OEIS) {
      _MenuBlock_47814740_OEIS = 0;
      _menuUpdateToEEpromItems();
    }
    _MenuBlock_47814740_ASO_1 =  "";
    _MenuBlock_47814740_MNO = "";
    _MenuBlock_47814740_VNO = "";
  }
  if (_gtv20) {
    if ( ! _MenuBlock_47814740_OMUIS) {
      _MenuBlock_47814740_OMUIS = 1; if (_tempVariable_bool) {
        _menuUpEvents(1);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OMUIS = 0;
  }
  if (_gtv21) {
    if ( ! _MenuBlock_47814740_OMDIS) {
      _MenuBlock_47814740_OMDIS = 1; if (_tempVariable_bool) {
        _menuDownEvents(1);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OMDIS = 0;
  }
  if (_gtv18) {
    if ( ! _MenuBlock_47814740_OEMIS) {
      _MenuBlock_47814740_OEMIS = 1; if (_tempVariable_bool) {
        _menuEnterTheMenuEvents (1);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OEMIS = 0;
  }
  if (_gtv19) {
    if ( ! _MenuBlock_47814740_OExFMIS) {
      _MenuBlock_47814740_OExFMIS = 1; if (_tempVariable_bool) {
        _menuExitFromMenuEvents (1);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OExFMIS = 0;
  }
  if (_gtv17) {
    if ( ! _MenuBlock_47814740_IDI_0) {
      _MenuBlock_47814740_IDI_0 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '0');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_0 = 0;
  }
  if (_gtv1) {
    if ( ! _MenuBlock_47814740_IDI_1) {
      _MenuBlock_47814740_IDI_1 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '1');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_1 = 0;
  }
  if (_gtv2) {
    if ( ! _MenuBlock_47814740_IDI_2) {
      _MenuBlock_47814740_IDI_2 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '2');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_2 = 0;
  }
  if (_gtv3) {
    if ( ! _MenuBlock_47814740_IDI_3) {
      _MenuBlock_47814740_IDI_3 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '3');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_3 = 0;
  }
  if (_gtv4) {
    if ( ! _MenuBlock_47814740_IDI_4) {
      _MenuBlock_47814740_IDI_4 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '4');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_4 = 0;
  }
  if (_gtv5) {
    if ( ! _MenuBlock_47814740_IDI_5) {
      _MenuBlock_47814740_IDI_5 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '5');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_5 = 0;
  }
  if (_gtv13) {
    if ( ! _MenuBlock_47814740_IDI_6) {
      _MenuBlock_47814740_IDI_6 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '6');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_6 = 0;
  }
  if (_gtv14) {
    if ( ! _MenuBlock_47814740_IDI_7) {
      _MenuBlock_47814740_IDI_7 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '7');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_7 = 0;
  }
  if (_gtv15) {
    if ( ! _MenuBlock_47814740_IDI_8) {
      _MenuBlock_47814740_IDI_8 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '8');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_8 = 0;
  }
  if (_gtv16) {
    if ( ! _MenuBlock_47814740_IDI_9) {
      _MenuBlock_47814740_IDI_9 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '9');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_9 = 0;
  }
  if (_gtv22) {
    if ( ! _MenuBlock_47814740MinusIOS) {
      _MenuBlock_47814740MinusIOS = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '-' );
      }
    }
  } else {
    _MenuBlock_47814740MinusIOS = 0;
  }
  if (_gtv8) {
    _dispTempLength2 = ((_MenuBlock_47814740_MNO)).length();
    if (_disp2oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp2oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 0);
    _lcd2.print((_MenuBlock_47814740_MNO));
  } else {
    if (_disp2oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp2oldLength = 0;
    }
  }
  if (_gtv8) {
    _dispTempLength2 = ((((_MenuBlock_47814740_VNO) + (String(" ")) + (_MenuBlock_47814740_ASO_1)))).length();
    if (_disp1oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp1oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 1);
    _lcd2.print((((_MenuBlock_47814740_VNO) + (String(" ")) + (_MenuBlock_47814740_ASO_1))));
  } else {
    if (_disp1oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp1oldLength = 0;
    }
  }
  if ((_gtv11) > (Menu_Value_2_TVD)) _trgr3 = 0;
  if ((_gtv11) < (Menu_Value_1_TVD)) _trgr3 = 1;
  digitalWrite(16, !(_trgr3));
  if (!(_gtv6)) {
    Menu_Value_1_TVD = _menuValueArray_int[1];
  }
  _gtv10 = _trgr3;
  if (!(_gtv6)) {
    Menu_Value_2_TVD = _menuValueArray_int[3];
  }
  if ((_gtv11) < (Menu_Value_4_TVD)) _trgr4 = 0;
  if ((_gtv11) > (Menu_Value_3_TVD)) _trgr4 = 1;
  if (!(_gtv6)) {
    Menu_Value_3_TVD = _menuValueArray_int[2];
  }
  digitalWrite(15, !(_trgr4));
  _gtv12 = _trgr4;
  if (!(_gtv6)) {
    Menu_Value_4_TVD = _menuValueArray_int[0];
  }
  digitalWrite(17, ( (( (_gtv12) || (_gtv10) )) && ((_menuValueArray_bool[0])) ));
  if (_gtv10)
  {
    _swi1 = String("Heater - ON");
  }
  else
  {
    _swi1 = String("Heater - OFF");
  }
  if (_gtv12)
  {
    _swi2 = String("Ventilation - ON");
  }
  else
  {
    _swi2 = String("Ventilation - OFF");
  }
  if (!(_gtv6)) {
    _dispTempLength2 = ((((String("Temp - ")) + (( _floatToStringWitRaz(_gtv11, 2))) + (String(" C"))))).length();
    if (_disp3oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp3oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 0);
    _lcd2.print((((String("Temp - ")) + (( _floatToStringWitRaz(_gtv11, 2))) + (String(" C")))));
  } else {
    if (_disp3oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp3oldLength = 0;
    }
  }
  if (!(_gtv6)) {
    _dispTempLength2 = ((_swi1)).length();
    if (_disp4oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp4oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 1);
    _lcd2.print((_swi1));
  } else {
    if (_disp4oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp4oldLength = 0;
    }
  }
  if (!(_gtv6)) {
    _dispTempLength2 = ((_swi2)).length();
    if (_disp5oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp5oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 2);
    _lcd2.print((_swi2));
  } else {
    if (_disp5oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp5oldLength = 0;
    }
  }




}
String  _floatToStringWitRaz(float value, int raz)
{

  return String(value, raz);
}
void _menuUpEvents (byte menuIndex)
{
  (_MainMenus[menuIndex]).tempString = "";
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  byte parentStartIndex;
  byte parentStopIndex;
  if (parIndex == 0) {
    parentStartIndex = (_MainMenus[menuIndex]).startIndex;
    parentStopIndex = (_MainMenus[menuIndex]).stopIndex;
  }
  else {
    parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 3]);
    parentStopIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 4]);
  }
  if (tempIndex == parentStartIndex) {
    if ((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {
      (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStopIndex - 1];
      return;
    } else {
      return;
    }
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex - 2];
  return;
}
void _menuDownEvents (byte menuIndex)
{
  (_MainMenus[menuIndex]).tempString = "";
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  byte parentStartIndex;
  byte parentStopIndex;
  if (parIndex == 0) {
    parentStartIndex = (_MainMenus[menuIndex]).startIndex;
    parentStopIndex = (_MainMenus[menuIndex]).stopIndex;
  }
  else {
    parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 3]);
    parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex - 1]).startInArrayIndex) + 4]);
  }
  if (tempIndex == parentStopIndex) {
    if ((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {
      (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStartIndex - 1];
      return;
    } else {
      return;
    }
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex];
  return;
}
void _menuEnterTheMenuEvents (byte menuIndex)
{
  byte itemType =  pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  if (!(itemType == 0)) {
    return;
  }
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte newIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[tempIndex - 1]).startInArrayIndex) + 3]);
  if (newIndex == 0) {
    return;
  }
  (_MainMenus[menuIndex]).tempString = "";
  (_MainMenus[menuIndex]).currentItem = _MenuItems[newIndex - 1];
  return;
}
void _menuExitFromMenuEvents (byte menuIndex)
{
  byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  if (parIndex == 0) {
    return;
  }
  (_MainMenus[menuIndex]).tempString = "";
  (_MainMenus[menuIndex]).currentItem = _MenuItems[parIndex - 1];
  return;
}
String _menuOutputValueString (byte menuIndex)
{
  byte itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte valueStrIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 11]);
  if (itemType == 0) {
    if ( valueStrIndex == 0) {
      return "";
    } else {
      return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[valueStrIndex - 1])));
    }
  }
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 7]);
  byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 6]);
  if ( valIndex == 0) {
    return "";
  }
  byte convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 9]);
  if (itemType == 3) {
    return _convertBoolean(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  if (itemType == 4) {
    return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  if (itemType == 5) {
    return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  return "";
}
void _menuDirectInputKeyPressEvents(byte menuIndex, char inputSymbol)
{
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte temp;
  if (valIndex == 0) {
    return;
  }
  byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  if (itemType == 7) {
    return;
  }
  if (itemType == 3) {
    (_MainMenus[menuIndex]).tempString = "";
  }
  if (inputSymbol == '-') {
    temp = ((_MainMenus[menuIndex]).tempString).length() ;  if (temp == 0) {
      (_MainMenus[menuIndex]).tempString = "-";
    } else
    { if (((_MainMenus[menuIndex]).tempString).charAt(0)  == '-') {
        (_MainMenus[menuIndex]).tempString = ((_MainMenus[menuIndex]).tempString).substring(1);
      } else
      {
        (_MainMenus[menuIndex]).tempString = "-" + (_MainMenus[menuIndex]).tempString;
      }
    }
  } else {
    (_MainMenus[menuIndex]).tempString = (_MainMenus[menuIndex]).tempString + inputSymbol;
  }
  if (itemType == 3) {
    _menuValueArray_bool[valIndex - 1]  =  ((((_MainMenus[menuIndex]).tempString )).toInt());
  }
  if (itemType == 4) {
    _menuValueArray_int[valIndex - 1]  =  (((_MainMenus[menuIndex]).tempString )).toInt();
  }
  if (itemType == 5) {
    _menuValueArray_long[valIndex - 1]  =  (((_MainMenus[menuIndex]).tempString ).toInt());
  }
}
void _menuUpdateToEEpromItems()
{
  EEPROM.updateLong(2, (_menuValueArray_long[1]));
  EEPROM.updateBit(1, 0, (_menuValueArray_bool[0]));
  EEPROM.updateInt(6, (_menuValueArray_int[0]));
  EEPROM.updateInt(8, (_menuValueArray_int[1]));
  EEPROM.updateInt(10, (_menuValueArray_int[2]));
  EEPROM.updateInt(12, (_menuValueArray_int[3]));
}
String _readStringFromProgmem (char *string)
{
  String result = String("");
  while (pgm_read_byte(string) != '\0')
  {
    result = result + char(pgm_read_byte(string));
    string++;
  }
  return result;
}
String _convertNamber(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)
{
  if (itemType == 4) {
    if (convFormat == 4) {
      return String((_menuValueArray_int[valIndex - 1 ]), DEC);
    }
    if (convFormat == 5) {
      return String((_menuValueArray_int[valIndex - 1]), HEX);
    }
    if (convFormat == 6) {
      return String((_menuValueArray_int[valIndex - 1]), BIN);
    }
  }
  if (itemType == 5) {
    if (convFormat == 4) {
      return String((_menuValueArray_long[valIndex - 1 ]), DEC);
    }
    if (convFormat == 5) {
      return String((_menuValueArray_long[valIndex - 1]), HEX);
    }
    if (convFormat == 6) {
      return String((_menuValueArray_long[valIndex - 1]), BIN);
    }
  }
}
String _convertBoolean(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)
{
  if (convFormat == 1) {
    if (_menuValueArray_bool[valIndex - 1]) {
      return "1";
    } else {
      return "0";
    }
  }
  if (convFormat == 2) {
    if (_menuValueArray_bool[valIndex - 1]) {
      return "True";
    } else {
      return "False";
    }
  }
  if (convFormat == 3) {
    if (_menuValueArray_bool[valIndex - 1 ]) {
      return "";
    } else {
      return "";
    }
  }
  if (_menuValueArray_bool[valIndex - 1]) {
    return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMax - 1])));
  } else {
    return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMin - 1])));
  }
}

يعد استخدام المقاوم كمرجع لدرجة الحرارة مناسبًا لتصحيح الأخطاء ، ولكن في التطبيق الحقيقي ، لا تزال بحاجة إلى مستشعر درجة حرارة. نستخدم مستشعر درجة الحرارة DS18B20. للقيام بذلك ، تحتاج إلى تغيير اللوحة الأولى في كلا المشروعين.



يتم استخدام كتلة ScanOneWare لتحديد عنوان المستشعر تلقائيًا. هذا يسمح لك باستبدال مستشعر درجة الحرارة ، إذا لزم الأمر ، دون وميض وحدة التحكم.

مخططات الدوائر المعدلة
LCD Keypad Shield.







نتيجة رمز الدائرة مع درع لوحة المفاتيح LCD.
#include <EEPROMex.h>
#include <LiquidCrystal.h>
#include <OneWire.h>
LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);
int _dispTempLength1 = 0;
boolean _isNeedClearDisp1;


struct UB_142171746
{
  bool ubo_101667604 = 0;
  bool ubo_51674151 = 0;
  bool ubo_137412502 = 0;
  bool ubo_174461762 = 0;
  bool ubo_157422683 = 0;
  int _gtv1 = 0;
  int _gtv2 = 0;
  int _gtv3 = 0;
  int _gtv4 = 0;
  int _gtv5 = 0;
  bool _bounse1S = 0;
  bool _bounse1O = 0;
  unsigned long _bounse1P = 0UL;
  bool _bounse2S = 0;
  bool _bounse2O = 0;
  unsigned long _bounse2P = 0UL;
  bool _bounse3S = 0;
  bool _bounse3O = 0;
  unsigned long _bounse3P = 0UL;
  bool _bounse4S = 0;
  bool _bounse4O = 0;
  unsigned long _bounse4P = 0UL;
  bool _bounse5S = 0;
  bool _bounse5O = 0;
  unsigned long _bounse5P = 0UL;
};
UB_142171746 UB_142171746_Instance1;
int UB_142171746_ubi_125089190 = 0;
OneWire  _ow12(12);
byte _FLPArray27618413[9];
const byte _menuParametrsArray[]  PROGMEM =  {1, 0, 0, 4, 5, 0, 0, 0, 0, 0, 1, 9, 0, 2, 0, 0, 6, 7, 0, 0, 0, 0, 0, 6, 9, 0, 3, 3, 1, 0, 0, 0, 10, 11, 1, 8, 3, 0, 0, 4, 4, 2, 0, 0, 1, 0, 0, 1, 4, 4, 0, 8, 5, 4, 4, 0, 0, 1, 0, 0, 1, 4, 7, 0, 8, 6, 4, 1, 0, 0, 2, 0, 0, 1, 4, 2, 0, 8, 7, 4, 3, 0, 0, 2, 0, 0, 1, 4, 5, 0, 8};
bool _menuValueArray_bool[1];
const bool _menuConstantValuesArray_bool[]  PROGMEM =  {1};
int _menuValueArray_int[4];
const int _menuConstantValuesArray_int[]  PROGMEM =  {1};
const char _flprogMenuNameString1[] PROGMEM = "HeaterSetting";
const char _flprogMenuNameString2[] PROGMEM = "Vent-On";
const char _flprogMenuNameString3[] PROGMEM = "Sound";
const char _flprogMenuNameString4[] PROGMEM = "Heater-On";
const char _flprogMenuNameString5[] PROGMEM = "Vent-Off";
const char _flprogMenuNameString6[] PROGMEM = "Vent Setting";
const char _flprogMenuNameString7[] PROGMEM = "Heater-Off";
const char _flprogMenuNameString8[] PROGMEM = "C";
const char _flprogMenuNameString9[] PROGMEM = "Enter to submenu";
const char _flprogMenuNameString10[] PROGMEM = "On";
const char _flprogMenuNameString11[] PROGMEM = "Off";
const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1,  _flprogMenuNameString2,  _flprogMenuNameString3,  _flprogMenuNameString4,  _flprogMenuNameString5,  _flprogMenuNameString6,  _flprogMenuNameString7,  _flprogMenuNameString8,  _flprogMenuNameString9,  _flprogMenuNameString10,  _flprogMenuNameString11};
struct _menuItemStricture {
  int startInArrayIndex;
};
struct _menuMainStricture {
  byte startIndex;
  byte stopIndex;
  bool isSwitchMenuAroundRing;
  _menuItemStricture  currentItem;
};
_menuItemStricture _MenuItems[7];
_menuMainStricture _MainMenus[1];
bool _gtv1;
bool _gtv2;
bool _gtv3;
bool _gtv4;
bool _gtv5;
bool _gtv6;
bool _gtv7;
bool _gtv8;
bool _gtv9;
bool _gtv10 = 0;
float _gtv11;
bool _gtv12 = 0;
int Menu_Value_3_TVD = 0;
int Menu_Value_1_TVD = 0;
String _swi2;
bool _trgrt4 = 0;
bool _trgrt4I = 0;
String _swi1;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
int _disp1oldLength = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
int _disp3oldLength = 0;
bool _sowb1_needScan = 0;
bool _sowb1_ost = 0;
bool _sowb1_FLPArray27618413 = 0;
int Menu_Value_4_TVD = 0;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
int Menu_Value_2_TVD = 0;
int _disp4oldLength = 0;
bool _trgr4 = 0;
bool _trgr2 = 0;
bool _trgr1 = 0;
bool _trgr3 = 0;
String _MenuBlock_47814740_ASO_1;
String _MenuBlock_47814740_MNO;
String _MenuBlock_47814740_VNO;
bool _MenuBlock_47814740_OEIS = 0;
bool _MenuBlock_47814740_OMUIS = 0;
bool _MenuBlock_47814740_OMDIS = 0;
bool _MenuBlock_47814740_OEMIS = 0;
bool _MenuBlock_47814740_OExFMIS = 0;
bool _MenuBlock_47814740_OVUIS = 0;
bool _MenuBlock_47814740_OVDIS = 0;
unsigned long _MenuBlock_47814740_VUDST = 0UL;
unsigned long _MenuBlock_47814740_VUDSPT = 0UL;
byte _MenuBlock_47814740_VUDSM = 0;
int _MenuBlock_47814740_VUDPT = 0;
bool _MenuBlock_47814740_AMMO = 0;
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0UL;
bool _tim3I = 0;
bool _tim3O = 0;
unsigned long _tim3P = 0UL;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
int _disp2oldLength = 0;
void setup()
{
  if ((EEPROM.read(0)) != 97) {
    EEPROM.write(0, 97) ;
    EEPROM.updateInt(8, 25);
    EEPROM.updateBit(1, 0, 0);
    EEPROM.updateInt(4, 10);
    EEPROM.updateInt(6, 30);
    EEPROM.updateInt(2, 40);
  }
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);

  _lcd1.begin(16, 2);
  _MenuItems[0].startInArrayIndex = 0;
  _MenuItems[1].startInArrayIndex = 13;
  _MenuItems[2].startInArrayIndex = 26;
  _MenuItems[3].startInArrayIndex = 39;
  _MenuItems[4].startInArrayIndex = 52;
  _MenuItems[5].startInArrayIndex = 65;
  _MenuItems[6].startInArrayIndex = 78;
  _MainMenus[0].startIndex = 1;
  _MainMenus[0].isSwitchMenuAroundRing = 1;
  _MainMenus[0].stopIndex = 3;
  _MainMenus[0].currentItem = _MenuItems[0];
  _menuValueArray_int[0] = (EEPROM.readInt(2));
  _menuValueArray_bool[0] = (EEPROM.readBit(1, 0));
  _menuValueArray_int[1] = (EEPROM.readInt(4));
  _menuValueArray_int[2] = (EEPROM.readInt(6));
  _menuValueArray_int[3] = (EEPROM.readInt(8));
}
void loop()
{ bool _tempVariable_bool;
  byte _tempVariable_byte;
  if (_isNeedClearDisp1) {
    _lcd1.clear();
    _isNeedClearDisp1 = 0;
  }




  if (1) {
    if (_trgrt4I) {
      _trgrt4 = 0;
    } else {
      _trgrt4 = 1;
      _trgrt4I = 1;
    }
  } else {
    _trgrt4 = 0;
    _trgrt4I = 0;
  };
  if (_isTimer(_d18x2x1Tti, 1000)) {
    _d18x2x1Tti = millis();
    _d18x2x1O =  _readDS18_ow12(_FLPArray27618413, _FLPArray27618413[8]);
  }
  if (_sowb1_needScan) {
    if ( _oneWireSeach (_FLPArray27618413, _ow12)) {
      _sowb1_FLPArray27618413 = 1;
    }
    _ow12.reset_search();
    _sowb1_needScan = 0;
  }
  if (_trgrt4) {
    if (! _sowb1_ost) {
      _sowb1_ost = 1;
      _sowb1_needScan = 1;
      _sowb1_FLPArray27618413 = 0;
    }
  } else {
    _sowb1_ost = 0;
  }
  _gtv11 = (_d18x2x1O);
  UB_142171746_ubi_125089190 =  (analogRead (0));
  UB_142171746_Instance1 = _func_UB_142171746(UB_142171746_Instance1, UB_142171746_ubi_125089190, 96, 250, 402, 635);
  _gtv3 = UB_142171746_Instance1.ubo_101667604;
  _gtv4 = UB_142171746_Instance1.ubo_51674151;
  _gtv5 = UB_142171746_Instance1.ubo_137412502;
  _gtv2 = UB_142171746_Instance1.ubo_174461762;
  _gtv1 = UB_142171746_Instance1.ubo_157422683;
  if (_gtv1)
  {
    if (_tim1I) {
      if (_isTimer(_tim1P, 2000)) {
        _tim1O = 1;
      }
    } else {
      _tim1I = 1;
      _tim1P = millis();
    }
  } else {
    _tim1O = 0;
    _tim1I = 0;
  }
  if (_tim2O) _trgr2 = 0;
  if (_tim1O) _trgr2 = 1;
  if (_trgr2) {
    if (_trgrt3I) {
      _trgrt3 = 0;
    } else {
      _trgrt3 = 1;
      _trgrt3I = 1;
    }
  } else {
    _trgrt3 = 0;
    _trgrt3I = 0;
  };
  if (_trgrt1) {
    _tim2O = 1;
    _tim2I = 1;
  } else {
    if (_tim2I) {
      _tim2I = 0;
      _tim2P = millis();
    } else {
      if (_tim2O) {
        if ( _isTimer(_tim2P, 200)) _tim2O = 0;
      }
    }
  }
  if (!(_gtv1)) {
    if (_trgrt1I) {
      _trgrt1 = 0;
    } else {
      _trgrt1 = 1;
      _trgrt1I = 1;
    }
  } else {
    _trgrt1 = 0;
    _trgrt1I = 0;
  };
  _gtv8 = _trgrt3;
  _gtv7 = ( (!(_trgr2)) && (_trgrt1) );
  if (1)
  {
    if (_tim3I) {
      if (_isTimer(_tim3P, 200)) {
        _tim3O = 1;
      }
    } else {
      _tim3I = 1;
      _tim3P = millis();
    }
  } else {
    _tim3O = 0;
    _tim3I = 0;
  }
  if (!(_gtv7)) {
    if (_trgrt2I) {
      _trgrt2 = 0;
    } else {
      _trgrt2 = 1;
      _trgrt2I = 1;
    }
  } else {
    _trgrt2 = 0;
    _trgrt2I = 0;
  };
  if (( (_gtv9) && (_gtv8) )) _trgr1 = 0;
  if (( (_tim3O) && (_trgrt2) )) _trgr1 = 1;
  _gtv6 = _trgr1;
  if (_gtv6) {
    _tempVariable_bool  =  1;
    if ( ! _MenuBlock_47814740_OEIS ) {
      _MenuBlock_47814740_OEIS = 1;
      _MainMenus[0].currentItem = _MenuItems[0];
    }
    _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem ).startInArrayIndex) + 10]);
    _MenuBlock_47814740_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    _MenuBlock_47814740_VNO = _menuOutputValueString (0);
    _MenuBlock_47814740_AMMO = (pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem ).startInArrayIndex) + 5]) ) == 0;
    _tempVariable_byte  =  pgm_read_byte(&_menuParametrsArray[(((_MainMenus[0]).currentItem).startInArrayIndex) + 12]);
    if (_tempVariable_byte == 0 ) {
      _MenuBlock_47814740_ASO_1 =  "";
    } else {
      _MenuBlock_47814740_ASO_1 =  _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    }
  } else {
    _tempVariable_bool  =  0;
    if (_MenuBlock_47814740_OEIS) {
      _MenuBlock_47814740_OEIS = 0;
      _menuUpdateToEEpromItems();
    }
    _MenuBlock_47814740_AMMO = 0;
    _MenuBlock_47814740_ASO_1 =  "";
    _MenuBlock_47814740_MNO = "";
    _MenuBlock_47814740_VNO = "";
  }
  if (_gtv4) {
    if ( ! _MenuBlock_47814740_OMUIS) {
      _MenuBlock_47814740_OMUIS = 1; if (_tempVariable_bool) {
        _menuUpEvents(0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OMUIS = 0;
  }
  if (_gtv5) {
    if ( ! _MenuBlock_47814740_OMDIS) {
      _MenuBlock_47814740_OMDIS = 1; if (_tempVariable_bool) {
        _menuDownEvents(0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OMDIS = 0;
  }
  if (( (_gtv7) && (_gtv6) )) {
    if ( ! _MenuBlock_47814740_OEMIS) {
      _MenuBlock_47814740_OEMIS = 1; if (_tempVariable_bool) {
        _menuEnterTheMenuEvents (0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OEMIS = 0;
  }
  if (_gtv8) {
    if ( ! _MenuBlock_47814740_OExFMIS) {
      _MenuBlock_47814740_OExFMIS = 1; if (_tempVariable_bool) {
        _menuExitFromMenuEvents (0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OExFMIS = 0;
  }
  if (_gtv3) {
    if ( ! _MenuBlock_47814740_OVUIS) {
      _MenuBlock_47814740_OVUIS = 1;
      if (_tempVariable_bool) {
        _valueUpEvents(0);
        _MenuBlock_47814740_VUDST = millis();
      }
    } if (_tempVariable_bool) {
      if (_MenuBlock_47814740_VUDSM == 0) {
        if (_isTimer(_MenuBlock_47814740_VUDST , 2000 )) {
          _MenuBlock_47814740_VUDSM = 1;
          _MenuBlock_47814740_VUDSPT = millis();
          _MenuBlock_47814740_VUDPT  = 500;
        }
      }  else {
        if (_MenuBlock_47814740_VUDSM == 1) {
          if (_isTimer(_MenuBlock_47814740_VUDST , 4000 )) {
            _MenuBlock_47814740_VUDSM = 2;
            _MenuBlock_47814740_VUDPT  = 200;
          }
        } if (_isTimer(_MenuBlock_47814740_VUDSPT , _MenuBlock_47814740_VUDPT )) {
          _valueUpEvents(0);
          _MenuBlock_47814740_VUDSPT = millis();
        }
      }
    }
  } else {
    _MenuBlock_47814740_OVUIS = 0;
    if ( ! ( _gtv2)) {
      _MenuBlock_47814740_VUDSM = 0;
    }
  }
  if (_gtv2) {
    if ( ! _MenuBlock_47814740_OVDIS) {
      _MenuBlock_47814740_OVDIS = 1;
      if (_tempVariable_bool) {
        _valueDownEvents(0);
        _MenuBlock_47814740_VUDST = millis();
      }
    } if (_tempVariable_bool) {
      if (_MenuBlock_47814740_VUDSM == 0) {
        if (_isTimer(_MenuBlock_47814740_VUDST , 2000 )) {
          _MenuBlock_47814740_VUDSM = 1;
          _MenuBlock_47814740_VUDSPT = millis();
          _MenuBlock_47814740_VUDPT  = 500;
        }
      }  else {
        if (_MenuBlock_47814740_VUDSM == 1) {
          if (_isTimer(_MenuBlock_47814740_VUDST , 4000 )) {
            _MenuBlock_47814740_VUDSM = 2;
            _MenuBlock_47814740_VUDPT  = 200;
          }
        } if (_isTimer(_MenuBlock_47814740_VUDSPT , _MenuBlock_47814740_VUDPT )) {
          _valueDownEvents(0);
          _MenuBlock_47814740_VUDSPT = millis();
        }
      }
    }
  } else {
    _MenuBlock_47814740_OVDIS = 0;
    if ( ! ( _gtv3)) {
      _MenuBlock_47814740_VUDSM = 0;
    }
  }
  if (_gtv6) {
    _dispTempLength1 = ((_MenuBlock_47814740_MNO)).length();
    if (_disp2oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp2oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1) / 2), 0);
    _lcd1.print((_MenuBlock_47814740_MNO));
  } else {
    if (_disp2oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp2oldLength = 0;
    }
  }
  if (_gtv6) {
    _dispTempLength1 = ((((_MenuBlock_47814740_VNO) + (String(" ")) + (_MenuBlock_47814740_ASO_1)))).length();
    if (_disp1oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp1oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1) / 2), 1);
    _lcd1.print((((_MenuBlock_47814740_VNO) + (String(" ")) + (_MenuBlock_47814740_ASO_1))));
  } else {
    if (_disp1oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp1oldLength = 0;
    }
  }
  _gtv9 = _MenuBlock_47814740_AMMO;
  if ((_gtv11) > (Menu_Value_2_TVD)) _trgr3 = 0;
  if ((_gtv11) < (Menu_Value_1_TVD)) _trgr3 = 1;
  digitalWrite(2, !(_trgr3));
  if (!(_gtv6)) {
    Menu_Value_1_TVD = _menuValueArray_int[1];
  }
  _gtv10 = _trgr3;
  if (!(_gtv6)) {
    Menu_Value_2_TVD = _menuValueArray_int[3];
  }
  if ((_gtv11) < (Menu_Value_4_TVD)) _trgr4 = 0;
  if ((_gtv11) > (Menu_Value_3_TVD)) _trgr4 = 1;
  if (!(_gtv6)) {
    Menu_Value_3_TVD = _menuValueArray_int[0];
  }
  digitalWrite(3, !(_trgr4));
  _gtv12 = _trgr4;
  if (!(_gtv6)) {
    Menu_Value_4_TVD = _menuValueArray_int[2];
  }
  digitalWrite(11, ( (( (_gtv12) || (_gtv10) )) && ((_menuValueArray_bool[0])) ));
  if (_gtv10)
  {
    _swi1 = String("H - ON");
  }
  else
  {
    _swi1 = String("H - OFF");
  }
  if (_gtv12)
  {
    _swi2 = String("V - ON");
  }
  else
  {
    _swi2 = String("V - OFF");
  }
  if (!(_gtv6)) {
    _dispTempLength1 = ((((String("Temp - ")) + (( _floatToStringWitRaz(_gtv11, 2))) + (String(" C"))))).length();
    if (_disp3oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp3oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1) / 2), 0);
    _lcd1.print((((String("Temp - ")) + (( _floatToStringWitRaz(_gtv11, 2))) + (String(" C")))));
  } else {
    if (_disp3oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp3oldLength = 0;
    }
  }
  if (!(_gtv6)) {
    _dispTempLength1 = ((((_swi1) + (String("  ")) + (_swi2)))).length();
    if (_disp4oldLength > _dispTempLength1) {
      _isNeedClearDisp1 = 1;
    }
    _disp4oldLength = _dispTempLength1;
    _lcd1.setCursor(int((16 - _dispTempLength1) / 2), 1);
    _lcd1.print((((_swi1) + (String("  ")) + (_swi2))));
  } else {
    if (_disp4oldLength > 0) {
      _isNeedClearDisp1 = 1;
      _disp4oldLength = 0;
    }
  }




}
String  _floatToStringWitRaz(float value, int raz)
{

  return String(value, raz);
}
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));
  }
}
void _menuUpEvents (byte menuIndex)
{
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  byte parentStartIndex;
  byte parentStopIndex;
  if (parIndex == 0) {
    parentStartIndex = (_MainMenus[menuIndex]).startIndex;
    parentStopIndex = (_MainMenus[menuIndex]).stopIndex;
  }
  else {
    parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 3]);
    parentStopIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 4]);
  }
  if (tempIndex == parentStartIndex) {
    if ((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {
      (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStopIndex - 1];
      return;
    } else {
      return;
    }
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex - 2];
  return;
}
void _menuDownEvents (byte menuIndex)
{
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  byte parentStartIndex;
  byte parentStopIndex;
  if (parIndex == 0) {
    parentStartIndex = (_MainMenus[menuIndex]).startIndex;
    parentStopIndex = (_MainMenus[menuIndex]).stopIndex;
  }
  else {
    parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 3]);
    parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex - 1]).startInArrayIndex) + 4]);
  }
  if (tempIndex == parentStopIndex) {
    if ((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {
      (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStartIndex - 1];
      return;
    } else {
      return;
    }
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex];
  return;
}
void _valueUpEvents (byte menuIndex)
{
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 6]);
  byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 8]);
  if (itemType == 3) {
    _menuValueArray_bool[valIndex - 1 ] = 1;
    return;
  }
  if (itemType == 4) {
    _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] + (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1]));
  }
}
void _valueDownEvents (byte menuIndex)
{

  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 7]);
  byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 8]);
  if (itemType == 3) {
    _menuValueArray_bool[valIndex - 1] = 0;
    return;
  }
  if (itemType == 4) {
    _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] - (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1]));
  }
}
void _menuEnterTheMenuEvents (byte menuIndex)
{
  byte itemType =  pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  if (!(itemType == 0)) {
    return;
  }
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte newIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[tempIndex - 1]).startInArrayIndex) + 3]);
  if (newIndex == 0) {
    return;
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[newIndex - 1];
  return;
}
void _menuExitFromMenuEvents (byte menuIndex)
{
  byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  if (parIndex == 0) {
    return;
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[parIndex - 1];
  return;
}
String _menuOutputValueString (byte menuIndex)
{
  byte itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte valueStrIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 11]);
  if (itemType == 0) {
    if ( valueStrIndex == 0) {
      return "";
    } else {
      return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[valueStrIndex - 1])));
    }
  }
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 7]);
  byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 6]);
  if ( valIndex == 0) {
    return "";
  }
  byte convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 9]);
  if (itemType == 3) {
    return _convertBoolean(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  if (itemType == 4) {
    return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  return "";
}
void _menuUpdateToEEpromItems()
{
  EEPROM.updateInt(2, (_menuValueArray_int[0]));
  EEPROM.updateBit(1, 0, (_menuValueArray_bool[0]));
  EEPROM.updateInt(4, (_menuValueArray_int[1]));
  EEPROM.updateInt(6, (_menuValueArray_int[2]));
  EEPROM.updateInt(8, (_menuValueArray_int[3]));
}
String _readStringFromProgmem (char *string)
{
  String result = String("");
  while (pgm_read_byte(string) != '\0')
  {
    result = result + char(pgm_read_byte(string));
    string++;
  }
  return result;
}
String _convertNamber(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)
{
  if (itemType == 4) {
    if (convFormat == 4) {
      return String((_menuValueArray_int[valIndex - 1 ]), DEC);
    }
    if (convFormat == 5) {
      return String((_menuValueArray_int[valIndex - 1]), HEX);
    }
    if (convFormat == 6) {
      return String((_menuValueArray_int[valIndex - 1]), BIN);
    }
  }
}
String _convertBoolean(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)
{
  if (convFormat == 1) {
    if (_menuValueArray_bool[valIndex - 1]) {
      return "1";
    } else {
      return "0";
    }
  }
  if (convFormat == 2) {
    if (_menuValueArray_bool[valIndex - 1]) {
      return "True";
    } else {
      return "False";
    }
  }
  if (convFormat == 3) {
    if (_menuValueArray_bool[valIndex - 1 ]) {
      return "";
    } else {
      return "";
    }
  }
  if (_menuValueArray_bool[valIndex - 1]) {
    return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMax - 1])));
  } else {
    return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMin - 1])));
  }
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s)
  {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  }
  else
  {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;   else if (cfg == 0x20) raw = raw & ~3;  else if (cfg == 0x40) raw = raw & ~1;
  }
  return  (float)raw / 16.0;
}
float _readDS18_ow12(byte addr[8], byte type_s)
{ byte data[12];
  byte i;
  _ow12.reset();
  _ow12.select(addr);
  _ow12.write(0xBE);
  for ( i = 0; i < 9; i++) {
    data[i] = _ow12.read();
  }
  _ow12.reset();
  _ow12.select(addr);
  _ow12.write(0x44, 1);
  return _convertDS18x2xData(type_s, data);
}
bool _oneWireSeach (byte array[], OneWire ow )
{
  byte temp[8];
  byte i;
  if ( !ow.search(temp)) {
    return false;
  }
  if (OneWire::crc8(temp, 7) != temp[7]) {
    return false;
  }

  switch (temp[0]) {
    case 0x10:
      array[8] = 1;
      break;
    case 0x28:
      array[8] = 0;
      break;
    case 0x22:
      array[8] = 0;
      break;
    default:
      return false;
  }

  for ( i = 0; i < 8; i++) {
    array[i] = temp[i];
  }
  return true;
} struct UB_142171746 _func_UB_142171746(struct UB_142171746 _ubInstans, int ubi_125089190, int ubpar_125440348, int ubpar_79146376, int ubpar_175158211, int ubpar_40719224)
{
  bool ubo_101667604 = _ubInstans.ubo_101667604;
  bool ubo_51674151 = _ubInstans.ubo_51674151;
  bool ubo_137412502 = _ubInstans.ubo_137412502;
  bool ubo_174461762 = _ubInstans.ubo_174461762;
  bool ubo_157422683 = _ubInstans.ubo_157422683;
  int _gtv1 = _ubInstans._gtv1;
  int _gtv2 = _ubInstans._gtv2;
  int _gtv3 = _ubInstans._gtv3;
  int _gtv4 = _ubInstans._gtv4;
  int _gtv5 = _ubInstans._gtv5;
  bool _bounse1S = _ubInstans._bounse1S;
  bool _bounse1O = _ubInstans._bounse1O;
  unsigned long _bounse1P = _ubInstans._bounse1P;
  bool _bounse2S = _ubInstans._bounse2S;
  bool _bounse2O = _ubInstans._bounse2O;
  unsigned long _bounse2P = _ubInstans._bounse2P;
  bool _bounse3S = _ubInstans._bounse3S;
  bool _bounse3O = _ubInstans._bounse3O;
  unsigned long _bounse3P = _ubInstans._bounse3P;
  bool _bounse4S = _ubInstans._bounse4S;
  bool _bounse4O = _ubInstans._bounse4O;
  unsigned long _bounse4P = _ubInstans._bounse4P;
  bool _bounse5S = _ubInstans._bounse5S;
  bool _bounse5O = _ubInstans._bounse5O;
  unsigned long _bounse5P = _ubInstans._bounse5P;
  bool   _bounceTmpD1 = (ubi_125089190) < (_gtv1);

  if (_bounse1S)
  {
    if (millis() >= (_bounse1P + 40))
    {
      _bounse1O =  _bounceTmpD1;
      _bounse1S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD1 != _bounse1O )
    {
      _bounse1S = 1;
      _bounse1P = millis();
    }
  }
  bool   _bounceTmpD2 = ( ((ubi_125089190) > (_gtv1)) && ((ubi_125089190) < (_gtv2)) );

  if (_bounse2S)
  {
    if (millis() >= (_bounse2P + 40))
    {
      _bounse2O =  _bounceTmpD2;
      _bounse2S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD2 != _bounse2O )
    {
      _bounse2S = 1;
      _bounse2P = millis();
    }
  }
  bool   _bounceTmpD3 = ( ((ubi_125089190) > (_gtv2)) && ((ubi_125089190) < (_gtv3)) );

  if (_bounse3S)
  {
    if (millis() >= (_bounse3P + 40))
    {
      _bounse3O =  _bounceTmpD3;
      _bounse3S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD3 != _bounse3O )
    {
      _bounse3S = 1;
      _bounse3P = millis();
    }
  }
  bool   _bounceTmpD4 = ( ((ubi_125089190) > (_gtv3)) && ((ubi_125089190) < (_gtv4)) );

  if (_bounse4S)
  {
    if (millis() >= (_bounse4P + 40))
    {
      _bounse4O =  _bounceTmpD4;
      _bounse4S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD4 != _bounse4O )
    {
      _bounse4S = 1;
      _bounse4P = millis();
    }
  }
  bool   _bounceTmpD5 = ( ((ubi_125089190) > (_gtv4)) && ((ubi_125089190) < (_gtv5)) );

  if (_bounse5S)
  {
    if (millis() >= (_bounse5P + 40))
    {
      _bounse5O =  _bounceTmpD5;
      _bounse5S = 0;
    }
  }
  else
  {
    if ( _bounceTmpD5 != _bounse5O )
    {
      _bounse5S = 1;
      _bounse5P = millis();
    }
  }
  _gtv1 = (ubpar_125440348) / (2);
  _gtv2 = (((ubpar_79146376) - (ubpar_125440348)) / (2)) + (ubpar_125440348);
  _gtv3 = (((ubpar_175158211) - (ubpar_79146376)) / (2)) + (ubpar_79146376);
  _gtv4 = (((ubpar_40719224) - (ubpar_175158211)) / (2)) + (ubpar_175158211);
  _gtv5 = (((1023) - (ubpar_40719224)) / (2)) + (ubpar_40719224);
  ubo_101667604 = _bounse1O;
  ubo_51674151 = _bounse2O;
  ubo_137412502 = _bounse3O;
  ubo_174461762 = _bounse4O;
  ubo_157422683 = _bounse5O;
  _ubInstans.ubo_101667604 = ubo_101667604;
  _ubInstans.ubo_51674151 = ubo_51674151;
  _ubInstans.ubo_137412502 = ubo_137412502;
  _ubInstans.ubo_174461762 = ubo_174461762;
  _ubInstans.ubo_157422683 = ubo_157422683;
  _ubInstans._gtv1 = _gtv1;
  _ubInstans._gtv2 = _gtv2;
  _ubInstans._gtv3 = _gtv3;
  _ubInstans._gtv4 = _gtv4;
  _ubInstans._gtv5 = _gtv5;
  _ubInstans._bounse1S = _bounse1S;
  _ubInstans._bounse1O = _bounse1O;
  _ubInstans._bounse1P = _bounse1P;
  _ubInstans._bounse2S = _bounse2S;
  _ubInstans._bounse2O = _bounse2O;
  _ubInstans._bounse2P = _bounse2P;
  _ubInstans._bounse3S = _bounse3S;
  _ubInstans._bounse3O = _bounse3O;
  _ubInstans._bounse3P = _bounse3P;
  _ubInstans._bounse4S = _bounse4S;
  _ubInstans._bounse4O = _bounse4O;
  _ubInstans._bounse4P = _bounse4P;
  _ubInstans._bounse5S = _bounse5S;
  _ubInstans._bounse5O = _bounse5O;
  _ubInstans._bounse5P = _bounse5P;
  return _ubInstans;
}

رمز النتيجة للوحة مفاتيح المصفوفة
#include <Wire.h>
#include <EEPROMex.h>
#include <OneWire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C _lcd2(0x27, 20, 4);
int _dispTempLength2 = 0;
boolean _isNeedClearDisp2;


OneWire  _ow12(12);
byte _FLPArray27618413[9];
const byte _menuParametrsArray[]  PROGMEM =  {1, 5, 1, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0, 2, 0, 0, 6, 7, 0, 0, 0, 0, 0, 9, 11, 0, 3, 0, 0, 8, 9, 0, 0, 0, 0, 0, 7, 11, 0, 4, 3, 1, 0, 0, 0, 12, 13, 1, 8, 4, 0, 0, 5, 5, 2, 0, 0, 0, 0, 0, 1, 4, 2, 0, 0, 6, 4, 4, 0, 0, 2, 0, 0, 1, 4, 8, 0, 10, 7, 4, 2, 0, 0, 2, 0, 0, 1, 4, 5, 0, 10, 8, 4, 3, 0, 0, 3, 0, 0, 1, 4, 6, 0, 10, 9, 4, 1, 0, 0, 3, 0, 0, 1, 4, 3, 0, 10};
bool _menuValueArray_bool[1];
const bool _menuConstantValuesArray_bool[]  PROGMEM =  {1};
int _menuValueArray_int[4];
const int _menuConstantValuesArray_int[]  PROGMEM =  {1};
long _menuValueArray_long[2];
const long _menuConstantValuesArray_long[]  PROGMEM =  {1};
const char _flprogMenuNameString1[] PROGMEM = "Enter Password";
const char _flprogMenuNameString2[] PROGMEM = "ChangePassword";
const char _flprogMenuNameString3[] PROGMEM = "Vent-Off";
const char _flprogMenuNameString4[] PROGMEM = "Sound";
const char _flprogMenuNameString5[] PROGMEM = "Heater-Off";
const char _flprogMenuNameString6[] PROGMEM = "Vent-On";
const char _flprogMenuNameString7[] PROGMEM = "Vent Setting";
const char _flprogMenuNameString8[] PROGMEM = "Heater-On";
const char _flprogMenuNameString9[] PROGMEM = "HeaterSetting";
const char _flprogMenuNameString10[] PROGMEM = "C";
const char _flprogMenuNameString11[] PROGMEM = "Enter to submenu";
const char _flprogMenuNameString12[] PROGMEM = "On";
const char _flprogMenuNameString13[] PROGMEM = "Off";
const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1,  _flprogMenuNameString2,  _flprogMenuNameString3,  _flprogMenuNameString4,  _flprogMenuNameString5,  _flprogMenuNameString6,  _flprogMenuNameString7,  _flprogMenuNameString8,  _flprogMenuNameString9,  _flprogMenuNameString10,  _flprogMenuNameString11,  _flprogMenuNameString12,  _flprogMenuNameString13};
struct _menuItemStricture {
  int startInArrayIndex;
};
struct _menuMainStricture {
  String tempString;
  byte startIndex;
  byte stopIndex;
  bool isSwitchMenuAroundRing;
  _menuItemStricture  currentItem;
};
_menuItemStricture _MenuItems[9];
_menuMainStricture _MainMenus[2];
bool _gtv6;
bool _gtv10 = 0;
float _gtv11;
bool _gtv12 = 0;
bool _gtv1;
bool _gtv2;
bool _gtv3;
bool _gtv4;
bool _gtv5;
bool _gtv13;
bool _gtv14;
bool _gtv15;
bool _gtv16;
bool _gtv17;
bool _gtv18;
bool _gtv19;
bool _gtv20;
bool _gtv21;
bool _gtv22;
bool _gtv23;
bool _gtv7;
bool _gtv8;
bool _trgr4 = 0;
int Menu_Value_1_TVD = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
bool _trgt1 = 0;
bool _trgt1I = 0;
int _disp4oldLength = 0;
String _MenuBlock_47814740_ASO_1;
String _MenuBlock_47814740_MNO;
String _MenuBlock_47814740_VNO;
bool _MenuBlock_47814740_OEIS = 0;
bool _MenuBlock_47814740_OMUIS = 0;
bool _MenuBlock_47814740_OMDIS = 0;
bool _MenuBlock_47814740_OEMIS = 0;
bool _MenuBlock_47814740_OExFMIS = 0;
bool _MenuBlock_47814740_OVUIS = 0;
bool _MenuBlock_47814740_OVDIS = 0;
unsigned long _MenuBlock_47814740_VUDST = 0UL;
unsigned long _MenuBlock_47814740_VUDSPT = 0UL;
byte _MenuBlock_47814740_VUDSM = 0;
int _MenuBlock_47814740_VUDPT = 0;
bool _MenuBlock_47814740_IDI_0 = 0;
bool _MenuBlock_47814740_IDI_1 = 0;
bool _MenuBlock_47814740_IDI_2 = 0;
bool _MenuBlock_47814740_IDI_3 = 0;
bool _MenuBlock_47814740_IDI_4 = 0;
bool _MenuBlock_47814740_IDI_5 = 0;
bool _MenuBlock_47814740_IDI_6 = 0;
bool _MenuBlock_47814740_IDI_7 = 0;
bool _MenuBlock_47814740_IDI_8 = 0;
bool _MenuBlock_47814740_IDI_9 = 0;
bool _MenuBlock_47814740MinusIOS = 0;
bool _trgr1 = 0;
bool _trgr3 = 0;
bool _mkb1C1xP1 = 0;
bool _mkb1C1xP2 = 0;
bool _mkb1C1xP3 = 0;
bool _mkb1C1xP4 = 0;
bool _mkb1C2xP1 = 0;
bool _mkb1C2xP2 = 0;
bool _mkb1C2xP3 = 0;
bool _mkb1C2xP4 = 0;
bool _mkb1C3xP1 = 0;
bool _mkb1C3xP2 = 0;
bool _mkb1C3xP3 = 0;
bool _mkb1C3xP4 = 0;
bool _mkb1C4xP1 = 0;
bool _mkb1C4xP2 = 0;
bool _mkb1C4xP3 = 0;
bool _mkb1C4xP4 = 0;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
int Menu_Value_4_TVD = 0;
int _disp7oldLength = 0;
String _swi2;
int _disp2oldLength = 0;
String _MenuBlock_360159546_MNO;
String _MenuBlock_360159546_VNO;
bool _MenuBlock_360159546_OEIS = 0;
bool _MenuBlock_360159546_OMUIS = 0;
bool _MenuBlock_360159546_OMDIS = 0;
bool _MenuBlock_360159546_OVUIS = 0;
bool _MenuBlock_360159546_OVDIS = 0;
bool _MenuBlock_360159546_IDI_0 = 0;
bool _MenuBlock_360159546_IDI_1 = 0;
bool _MenuBlock_360159546_IDI_2 = 0;
bool _MenuBlock_360159546_IDI_3 = 0;
bool _MenuBlock_360159546_IDI_4 = 0;
bool _MenuBlock_360159546_IDI_5 = 0;
bool _MenuBlock_360159546_IDI_6 = 0;
bool _MenuBlock_360159546_IDI_7 = 0;
bool _MenuBlock_360159546_IDI_8 = 0;
bool _MenuBlock_360159546_IDI_9 = 0;
int Menu_Value_3_TVD = 0;
int Menu_Value_2_TVD = 0;
String _swi1;
int _disp1oldLength = 0;
int _disp3oldLength = 0;
int _disp6oldLength = 0;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
int _disp5oldLength = 0;
bool _sowb1_needScan = 0;
bool _sowb1_ost = 0;
bool _sowb1_FLPArray27618413 = 0;
void setup()
{
  if ((EEPROM.read(0)) != 99) {
    EEPROM.write(0, 99) ;
    EEPROM.updateInt(10, 40);
    EEPROM.updateBit(1, 0, 0);
    EEPROM.updateInt(6, 30);
    EEPROM.updateInt(12, 10);
    EEPROM.updateLong(2, 123456);
    EEPROM.updateInt(8, 25);
  }
  Wire.begin();
  pinMode(16, OUTPUT);
  pinMode(15, OUTPUT);
  pinMode(17, OUTPUT);

  _lcd2.init();
  _lcd2.backlight();
  pinMode(6, INPUT);
  digitalWrite(6, HIGH);
  pinMode(7, INPUT);
  digitalWrite(7, HIGH);
  pinMode(8, INPUT);
  digitalWrite(8, HIGH);
  pinMode(9, INPUT);
  digitalWrite(9, HIGH);
  pinMode(2, OUTPUT);
  digitalWrite(2, HIGH);
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH);
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
  _MenuItems[0].startInArrayIndex = 0;
  _MenuItems[1].startInArrayIndex = 13;
  _MenuItems[2].startInArrayIndex = 26;
  _MenuItems[3].startInArrayIndex = 39;
  _MenuItems[4].startInArrayIndex = 52;
  _MenuItems[5].startInArrayIndex = 65;
  _MenuItems[6].startInArrayIndex = 78;
  _MenuItems[7].startInArrayIndex = 91;
  _MenuItems[8].startInArrayIndex = 104;
  _MainMenus[0].tempString = "";
  _MainMenus[0].startIndex = 1;
  _MainMenus[0].isSwitchMenuAroundRing = 0;
  _MainMenus[0].stopIndex = 1;
  _MainMenus[0].currentItem = _MenuItems[0];
  _MainMenus[1].tempString = "";
  _MainMenus[1].startIndex = 2;
  _MainMenus[1].isSwitchMenuAroundRing = 1;
  _MainMenus[1].stopIndex = 5;
  _MainMenus[1].currentItem = _MenuItems[1];
  _menuValueArray_long[1] = (EEPROM.readLong(2));
  _menuValueArray_int[0] = (EEPROM.readInt(6));
  _menuValueArray_bool[0] = (EEPROM.readBit(1, 0));
  _menuValueArray_int[1] = (EEPROM.readInt(8));
  _menuValueArray_int[2] = (EEPROM.readInt(10));
  _menuValueArray_int[3] = (EEPROM.readInt(12));
}
void loop()
{ bool _tempVariable_bool;
  byte _tempVariable_byte;
  if (_isNeedClearDisp2) {
    _lcd2.clear();
    _isNeedClearDisp2 = 0;
  }




  if (1) {
    if (_trgrt2I) {
      _trgrt2 = 0;
    } else {
      _trgrt2 = 1;
      _trgrt2I = 1;
    }
  } else {
    _trgrt2 = 0;
    _trgrt2I = 0;
  };
  if (_isTimer(_d18x2x1Tti, 1000)) {
    _d18x2x1Tti = millis();
    _d18x2x1O =  _readDS18_ow12(_FLPArray27618413, _FLPArray27618413[8]);
  }
  if (_sowb1_needScan) {
    if ( _oneWireSeach (_FLPArray27618413, _ow12)) {
      _sowb1_FLPArray27618413 = 1;
    }
    _ow12.reset_search();
    _sowb1_needScan = 0;
  }
  if (_trgrt2) {
    if (! _sowb1_ost) {
      _sowb1_ost = 1;
      _sowb1_needScan = 1;
      _sowb1_FLPArray27618413 = 0;
    }
  } else {
    _sowb1_ost = 0;
  }
  _gtv11 = (_d18x2x1O);
  digitalWrite(2, 0);
  _mkb1C1xP1 = ! (digitalRead(6));
  _mkb1C1xP2 = ! (digitalRead(7));
  _mkb1C1xP3 = ! (digitalRead(8));
  _mkb1C1xP4 = ! (digitalRead(9));
  digitalWrite(2, 1);
  digitalWrite(3, 0);
  _mkb1C2xP1 = ! (digitalRead(6));
  _mkb1C2xP2 = ! (digitalRead(7));
  _mkb1C2xP3 = ! (digitalRead(8));
  _mkb1C2xP4 = ! (digitalRead(9));
  digitalWrite(3, 1);
  digitalWrite(4, 0);
  _mkb1C3xP1 = ! (digitalRead(6));
  _mkb1C3xP2 = ! (digitalRead(7));
  _mkb1C3xP3 = ! (digitalRead(8));
  _mkb1C3xP4 = ! (digitalRead(9));
  digitalWrite(4, 1);
  digitalWrite(5, 0);
  _mkb1C4xP1 = ! (digitalRead(6));
  _mkb1C4xP2 = ! (digitalRead(7));
  _mkb1C4xP3 = ! (digitalRead(8));
  _mkb1C4xP4 = ! (digitalRead(9));
  digitalWrite(5, 1);
  _gtv1 = _mkb1C1xP1;
  _gtv2 = _mkb1C1xP2;
  _gtv3 = _mkb1C1xP3;
  _gtv18 = _mkb1C1xP4;
  _gtv4 = _mkb1C2xP1;
  _gtv5 = _mkb1C2xP2;
  _gtv13 = _mkb1C2xP3;
  _gtv19 = _mkb1C2xP4;
  _gtv14 = _mkb1C3xP1;
  _gtv15 = _mkb1C3xP2;
  _gtv16 = _mkb1C3xP3;
  _gtv20 = _mkb1C3xP4;
  _gtv23 = _mkb1C4xP1;
  _gtv17 = _mkb1C4xP2;
  _gtv22 = _mkb1C4xP3;
  _gtv21 = _mkb1C4xP4;
  bool  _tmp1 = _gtv23;
  if (_tmp1)  {
    if (! _trgt1I) _trgt1 = ! _trgt1;
  }
  _trgt1I = _tmp1;
  _gtv6 = _trgt1;
  if (_gtv7) {
    _tempVariable_bool  =  1;
    if ( ! _MenuBlock_360159546_OEIS ) {
      _MenuBlock_360159546_OEIS = 1;
      (_MainMenus[0]).tempString = "";
    }
    _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem ).startInArrayIndex) + 10]);
    _MenuBlock_360159546_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    _MenuBlock_360159546_VNO = _menuOutputValueString (0);
  } else {
    _tempVariable_bool  =  0;
    if (_MenuBlock_360159546_OEIS) {
      _MenuBlock_360159546_OEIS = 0;
      _menuUpdateToEEpromItems();
    }
    _MenuBlock_360159546_MNO = "";
    _MenuBlock_360159546_VNO = "";
  }
  if (0) {
    if ( ! _MenuBlock_360159546_OMUIS) {
      _MenuBlock_360159546_OMUIS = 1; if (_tempVariable_bool) {
        _menuUpEvents(0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_360159546_OMUIS = 0;
  }
  if (0) {
    if ( ! _MenuBlock_360159546_OMDIS) {
      _MenuBlock_360159546_OMDIS = 1; if (_tempVariable_bool) {
        _menuDownEvents(0);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_360159546_OMDIS = 0;
  }
  if (0) {
    if ( ! _MenuBlock_360159546_OVUIS) {
      _MenuBlock_360159546_OVUIS = 1;
      if (_tempVariable_bool) {
        _valueUpEvents(0);
      }
    }
  } else {
    _MenuBlock_360159546_OVUIS = 0;
  }
  if (0) {
    if ( ! _MenuBlock_360159546_OVDIS) {
      _MenuBlock_360159546_OVDIS = 1;
      if (_tempVariable_bool) {
        _valueDownEvents(0);
      }
    }
  } else {
    _MenuBlock_360159546_OVDIS = 0;
  }
  if (_gtv17) {
    if ( ! _MenuBlock_360159546_IDI_0) {
      _MenuBlock_360159546_IDI_0 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '0');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_0 = 0;
  }
  if (_gtv1) {
    if ( ! _MenuBlock_360159546_IDI_1) {
      _MenuBlock_360159546_IDI_1 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '1');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_1 = 0;
  }
  if (_gtv2) {
    if ( ! _MenuBlock_360159546_IDI_2) {
      _MenuBlock_360159546_IDI_2 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '2');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_2 = 0;
  }
  if (_gtv3) {
    if ( ! _MenuBlock_360159546_IDI_3) {
      _MenuBlock_360159546_IDI_3 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '3');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_3 = 0;
  }
  if (_gtv4) {
    if ( ! _MenuBlock_360159546_IDI_4) {
      _MenuBlock_360159546_IDI_4 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '4');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_4 = 0;
  }
  if (_gtv5) {
    if ( ! _MenuBlock_360159546_IDI_5) {
      _MenuBlock_360159546_IDI_5 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '5');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_5 = 0;
  }
  if (_gtv13) {
    if ( ! _MenuBlock_360159546_IDI_6) {
      _MenuBlock_360159546_IDI_6 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '6');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_6 = 0;
  }
  if (_gtv14) {
    if ( ! _MenuBlock_360159546_IDI_7) {
      _MenuBlock_360159546_IDI_7 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '7');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_7 = 0;
  }
  if (_gtv15) {
    if ( ! _MenuBlock_360159546_IDI_8) {
      _MenuBlock_360159546_IDI_8 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '8');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_8 = 0;
  }
  if (_gtv16) {
    if ( ! _MenuBlock_360159546_IDI_9) {
      _MenuBlock_360159546_IDI_9 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(0, '9');
      }
    }
  } else {
    _MenuBlock_360159546_IDI_9 = 0;
  }
  if (_gtv7) {
    _dispTempLength2 = ((_MenuBlock_360159546_MNO)).length();
    if (_disp6oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp6oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 0);
    _lcd2.print((_MenuBlock_360159546_MNO));
  } else {
    if (_disp6oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp6oldLength = 0;
    }
  }
  if (_gtv7) {
    _dispTempLength2 = ((_MenuBlock_360159546_VNO)).length();
    if (_disp7oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp7oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 1);
    _lcd2.print((_MenuBlock_360159546_VNO));
  } else {
    if (_disp7oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp7oldLength = 0;
    }
  }
  if (_trgrt1) _trgr1 = 0;
  if (((_menuValueArray_long[0])) == ((_menuValueArray_long[1]))) _trgr1 = 1;
  if (!(_gtv6)) {
    if (_trgrt1I) {
      _trgrt1 = 0;
    } else {
      _trgrt1 = 1;
      _trgrt1I = 1;
    }
  } else {
    _trgrt1 = 0;
    _trgrt1I = 0;
  };
  _gtv7 = ( (_gtv6) && (!(_trgr1)) );
  _gtv8 = ( (_trgr1) && (_gtv6) );
  if (_trgrt1) {
    _menuValueArray_long[0] = 0L;
  }
  if (_gtv8) {
    _tempVariable_bool  =  1;
    if ( ! _MenuBlock_47814740_OEIS ) {
      _MenuBlock_47814740_OEIS = 1;
      _MainMenus[1].currentItem = _MenuItems[1];
      (_MainMenus[1]).tempString = "";
    }
    _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[1].currentItem ).startInArrayIndex) + 10]);
    _MenuBlock_47814740_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    _MenuBlock_47814740_VNO = _menuOutputValueString (1);
    _tempVariable_byte  =  pgm_read_byte(&_menuParametrsArray[(((_MainMenus[1]).currentItem).startInArrayIndex) + 12]);
    if (_tempVariable_byte == 0 ) {
      _MenuBlock_47814740_ASO_1 =  "";
    } else {
      _MenuBlock_47814740_ASO_1 =  _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));
    }
  } else {
    _tempVariable_bool  =  0;
    if (_MenuBlock_47814740_OEIS) {
      _MenuBlock_47814740_OEIS = 0;
      _menuUpdateToEEpromItems();
    }
    _MenuBlock_47814740_ASO_1 =  "";
    _MenuBlock_47814740_MNO = "";
    _MenuBlock_47814740_VNO = "";
  }
  if (_gtv20) {
    if ( ! _MenuBlock_47814740_OMUIS) {
      _MenuBlock_47814740_OMUIS = 1; if (_tempVariable_bool) {
        _menuUpEvents(1);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OMUIS = 0;
  }
  if (_gtv21) {
    if ( ! _MenuBlock_47814740_OMDIS) {
      _MenuBlock_47814740_OMDIS = 1; if (_tempVariable_bool) {
        _menuDownEvents(1);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OMDIS = 0;
  }
  if (_gtv18) {
    if ( ! _MenuBlock_47814740_OEMIS) {
      _MenuBlock_47814740_OEMIS = 1; if (_tempVariable_bool) {
        _menuEnterTheMenuEvents (1);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OEMIS = 0;
  }
  if (_gtv19) {
    if ( ! _MenuBlock_47814740_OExFMIS) {
      _MenuBlock_47814740_OExFMIS = 1; if (_tempVariable_bool) {
        _menuExitFromMenuEvents (1);
        _menuUpdateToEEpromItems();
      }
    }
  } else {
    _MenuBlock_47814740_OExFMIS = 0;
  }
  if (0) {
    if ( ! _MenuBlock_47814740_OVUIS) {
      _MenuBlock_47814740_OVUIS = 1;
      if (_tempVariable_bool) {
        _valueUpEvents(1);
        _MenuBlock_47814740_VUDST = millis();
      }
    } if (_tempVariable_bool) {
      if (_MenuBlock_47814740_VUDSM == 0) {
        if (_isTimer(_MenuBlock_47814740_VUDST , 2000 )) {
          _MenuBlock_47814740_VUDSM = 1;
          _MenuBlock_47814740_VUDSPT = millis();
          _MenuBlock_47814740_VUDPT  = 500;
        }
      }  else {
        if (_MenuBlock_47814740_VUDSM == 1) {
          if (_isTimer(_MenuBlock_47814740_VUDST , 4000 )) {
            _MenuBlock_47814740_VUDSM = 2;
            _MenuBlock_47814740_VUDPT  = 200;
          }
        } if (_isTimer(_MenuBlock_47814740_VUDSPT , _MenuBlock_47814740_VUDPT )) {
          _valueUpEvents(1);
          _MenuBlock_47814740_VUDSPT = millis();
        }
      }
    }
  } else {
    _MenuBlock_47814740_OVUIS = 0;
    if ( ! ( 0)) {
      _MenuBlock_47814740_VUDSM = 0;
    }
  }
  if (0) {
    if ( ! _MenuBlock_47814740_OVDIS) {
      _MenuBlock_47814740_OVDIS = 1;
      if (_tempVariable_bool) {
        _valueDownEvents(1);
        _MenuBlock_47814740_VUDST = millis();
      }
    } if (_tempVariable_bool) {
      if (_MenuBlock_47814740_VUDSM == 0) {
        if (_isTimer(_MenuBlock_47814740_VUDST , 2000 )) {
          _MenuBlock_47814740_VUDSM = 1;
          _MenuBlock_47814740_VUDSPT = millis();
          _MenuBlock_47814740_VUDPT  = 500;
        }
      }  else {
        if (_MenuBlock_47814740_VUDSM == 1) {
          if (_isTimer(_MenuBlock_47814740_VUDST , 4000 )) {
            _MenuBlock_47814740_VUDSM = 2;
            _MenuBlock_47814740_VUDPT  = 200;
          }
        } if (_isTimer(_MenuBlock_47814740_VUDSPT , _MenuBlock_47814740_VUDPT )) {
          _valueDownEvents(1);
          _MenuBlock_47814740_VUDSPT = millis();
        }
      }
    }
  } else {
    _MenuBlock_47814740_OVDIS = 0;
    if ( ! ( 0)) {
      _MenuBlock_47814740_VUDSM = 0;
    }
  }
  if (_gtv17) {
    if ( ! _MenuBlock_47814740_IDI_0) {
      _MenuBlock_47814740_IDI_0 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '0');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_0 = 0;
  }
  if (_gtv1) {
    if ( ! _MenuBlock_47814740_IDI_1) {
      _MenuBlock_47814740_IDI_1 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '1');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_1 = 0;
  }
  if (_gtv2) {
    if ( ! _MenuBlock_47814740_IDI_2) {
      _MenuBlock_47814740_IDI_2 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '2');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_2 = 0;
  }
  if (_gtv3) {
    if ( ! _MenuBlock_47814740_IDI_3) {
      _MenuBlock_47814740_IDI_3 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '3');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_3 = 0;
  }
  if (_gtv4) {
    if ( ! _MenuBlock_47814740_IDI_4) {
      _MenuBlock_47814740_IDI_4 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '4');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_4 = 0;
  }
  if (_gtv5) {
    if ( ! _MenuBlock_47814740_IDI_5) {
      _MenuBlock_47814740_IDI_5 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '5');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_5 = 0;
  }
  if (_gtv13) {
    if ( ! _MenuBlock_47814740_IDI_6) {
      _MenuBlock_47814740_IDI_6 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '6');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_6 = 0;
  }
  if (_gtv14) {
    if ( ! _MenuBlock_47814740_IDI_7) {
      _MenuBlock_47814740_IDI_7 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '7');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_7 = 0;
  }
  if (_gtv15) {
    if ( ! _MenuBlock_47814740_IDI_8) {
      _MenuBlock_47814740_IDI_8 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '8');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_8 = 0;
  }
  if (_gtv16) {
    if ( ! _MenuBlock_47814740_IDI_9) {
      _MenuBlock_47814740_IDI_9 = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '9');
      }
    }
  } else {
    _MenuBlock_47814740_IDI_9 = 0;
  }
  if (_gtv22) {
    if ( ! _MenuBlock_47814740MinusIOS) {
      _MenuBlock_47814740MinusIOS = 1;
      if (_tempVariable_bool) {
        _menuDirectInputKeyPressEvents(1, '-' );
      }
    }
  } else {
    _MenuBlock_47814740MinusIOS = 0;
  }
  if (_gtv8) {
    _dispTempLength2 = ((_MenuBlock_47814740_MNO)).length();
    if (_disp2oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp2oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 0);
    _lcd2.print((_MenuBlock_47814740_MNO));
  } else {
    if (_disp2oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp2oldLength = 0;
    }
  }
  if (_gtv8) {
    _dispTempLength2 = ((((_MenuBlock_47814740_VNO) + (String(" ")) + (_MenuBlock_47814740_ASO_1)))).length();
    if (_disp1oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp1oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 1);
    _lcd2.print((((_MenuBlock_47814740_VNO) + (String(" ")) + (_MenuBlock_47814740_ASO_1))));
  } else {
    if (_disp1oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp1oldLength = 0;
    }
  }
  if ((_gtv11) > (Menu_Value_2_TVD)) _trgr3 = 0;
  if ((_gtv11) < (Menu_Value_1_TVD)) _trgr3 = 1;
  digitalWrite(16, !(_trgr3));
  if (!(_gtv6)) {
    Menu_Value_1_TVD = _menuValueArray_int[3];
  }
  _gtv10 = _trgr3;
  if (!(_gtv6)) {
    Menu_Value_2_TVD = _menuValueArray_int[1];
  }
  if ((_gtv11) < (Menu_Value_4_TVD)) _trgr4 = 0;
  if ((_gtv11) > (Menu_Value_3_TVD)) _trgr4 = 1;
  if (!(_gtv6)) {
    Menu_Value_3_TVD = _menuValueArray_int[2];
  }
  digitalWrite(15, !(_trgr4));
  _gtv12 = _trgr4;
  if (!(_gtv6)) {
    Menu_Value_4_TVD = _menuValueArray_int[0];
  }
  digitalWrite(17, ( (( (_gtv12) || (_gtv10) )) && ((_menuValueArray_bool[0])) ));
  if (_gtv10)
  {
    _swi1 = String("Heater - ON");
  }
  else
  {
    _swi1 = String("Heater - OFF");
  }
  if (_gtv12)
  {
    _swi2 = String("Ventilation - ON");
  }
  else
  {
    _swi2 = String("Ventilation - OFF");
  }
  if (!(_gtv6)) {
    _dispTempLength2 = ((((String("Temp - ")) + (( _floatToStringWitRaz(_gtv11, 2))) + (String(" C"))))).length();
    if (_disp3oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp3oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 0);
    _lcd2.print((((String("Temp - ")) + (( _floatToStringWitRaz(_gtv11, 2))) + (String(" C")))));
  } else {
    if (_disp3oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp3oldLength = 0;
    }
  }
  if (!(_gtv6)) {
    _dispTempLength2 = ((_swi1)).length();
    if (_disp4oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp4oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 1);
    _lcd2.print((_swi1));
  } else {
    if (_disp4oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp4oldLength = 0;
    }
  }
  if (!(_gtv6)) {
    _dispTempLength2 = ((_swi2)).length();
    if (_disp5oldLength > _dispTempLength2) {
      _isNeedClearDisp2 = 1;
    }
    _disp5oldLength = _dispTempLength2;
    _lcd2.setCursor(int((20 - _dispTempLength2) / 2), 2);
    _lcd2.print((_swi2));
  } else {
    if (_disp5oldLength > 0) {
      _isNeedClearDisp2 = 1;
      _disp5oldLength = 0;
    }
  }




}
String  _floatToStringWitRaz(float value, int raz)
{

  return String(value, raz);
}
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));
  }
}
void _menuUpEvents (byte menuIndex)
{
  (_MainMenus[menuIndex]).tempString = "";
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  byte parentStartIndex;
  byte parentStopIndex;
  if (parIndex == 0) {
    parentStartIndex = (_MainMenus[menuIndex]).startIndex;
    parentStopIndex = (_MainMenus[menuIndex]).stopIndex;
  }
  else {
    parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 3]);
    parentStopIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 4]);
  }
  if (tempIndex == parentStartIndex) {
    if ((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {
      (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStopIndex - 1];
      return;
    } else {
      return;
    }
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex - 2];
  return;
}
void _menuDownEvents (byte menuIndex)
{
  (_MainMenus[menuIndex]).tempString = "";
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  byte parentStartIndex;
  byte parentStopIndex;
  if (parIndex == 0) {
    parentStartIndex = (_MainMenus[menuIndex]).startIndex;
    parentStopIndex = (_MainMenus[menuIndex]).stopIndex;
  }
  else {
    parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex) + 3]);
    parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex - 1]).startInArrayIndex) + 4]);
  }
  if (tempIndex == parentStopIndex) {
    if ((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {
      (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStartIndex - 1];
      return;
    } else {
      return;
    }
  }
  (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex];
  return;
}
void _valueUpEvents (byte menuIndex)
{
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 6]);
  byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 8]);
  if (itemType == 3) {
    _menuValueArray_bool[valIndex - 1 ] = 1;
    return;
  }
  if (itemType == 4) {
    _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] + (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1]));
  }
  if (itemType == 5) {
    _menuValueArray_long[valIndex - 1] = _menuValueArray_long[valIndex - 1] + (pgm_read_dword(&_menuConstantValuesArray_long[indexStep - 1]));
  }
}
void _valueDownEvents (byte menuIndex)
{

  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 7]);
  byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 8]);
  if (itemType == 3) {
    _menuValueArray_bool[valIndex - 1] = 0;
    return;
  }
  if (itemType == 4) {
    _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] - (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1]));
  }
  if (itemType == 5) {
    _menuValueArray_long[valIndex - 1] = _menuValueArray_long[valIndex - 1] - (pgm_read_dword(&_menuConstantValuesArray_long[indexStep - 1]));
  }
}
void _menuEnterTheMenuEvents (byte menuIndex)
{
  byte itemType =  pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  if (!(itemType == 0)) {
    return;
  }
  byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
  byte newIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[tempIndex - 1]).startInArrayIndex) + 3]);
  if (newIndex == 0) {
    return;
  }
  (_MainMenus[menuIndex]).tempString = "";
  (_MainMenus[menuIndex]).currentItem = _MenuItems[newIndex - 1];
  return;
}
void _menuExitFromMenuEvents (byte menuIndex)
{
  byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 5]);
  if (parIndex == 0) {
    return;
  }
  (_MainMenus[menuIndex]).tempString = "";
  (_MainMenus[menuIndex]).currentItem = _MenuItems[parIndex - 1];
  return;
}
String _menuOutputValueString (byte menuIndex)
{
  byte itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  byte valueStrIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 11]);
  if (itemType == 0) {
    if ( valueStrIndex == 0) {
      return "";
    } else {
      return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[valueStrIndex - 1])));
    }
  }
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 7]);
  byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 6]);
  if ( valIndex == 0) {
    return "";
  }
  byte convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 9]);
  if (itemType == 3) {
    return _convertBoolean(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  if (itemType == 4) {
    return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  if (itemType == 5) {
    return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);
  }
  return "";
}
void _menuDirectInputKeyPressEvents(byte menuIndex, char inputSymbol)
{
  byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 2]);
  byte temp;
  if (valIndex == 0) {
    return;
  }
  byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex) + 1]);
  if (itemType == 7) {
    return;
  }
  if (itemType == 3) {
    (_MainMenus[menuIndex]).tempString = "";
  }
  if (inputSymbol == '-') {
    temp = ((_MainMenus[menuIndex]).tempString).length() ;  if (temp == 0) {
      (_MainMenus[menuIndex]).tempString = "-";
    } else
    { if (((_MainMenus[menuIndex]).tempString).charAt(0)  == '-') {
        (_MainMenus[menuIndex]).tempString = ((_MainMenus[menuIndex]).tempString).substring(1);
      } else
      {
        (_MainMenus[menuIndex]).tempString = "-" + (_MainMenus[menuIndex]).tempString;
      }
    }
  } else {
    (_MainMenus[menuIndex]).tempString = (_MainMenus[menuIndex]).tempString + inputSymbol;
  }
  if (itemType == 3) {
    _menuValueArray_bool[valIndex - 1]  =  ((((_MainMenus[menuIndex]).tempString )).toInt());
  }
  if (itemType == 4) {
    _menuValueArray_int[valIndex - 1]  =  (((_MainMenus[menuIndex]).tempString )).toInt();
  }
  if (itemType == 5) {
    _menuValueArray_long[valIndex - 1]  =  (((_MainMenus[menuIndex]).tempString ).toInt());
  }
}
void _menuUpdateToEEpromItems()
{
  EEPROM.updateLong(2, (_menuValueArray_long[1]));
  EEPROM.updateInt(6, (_menuValueArray_int[0]));
  EEPROM.updateBit(1, 0, (_menuValueArray_bool[0]));
  EEPROM.updateInt(8, (_menuValueArray_int[1]));
  EEPROM.updateInt(10, (_menuValueArray_int[2]));
  EEPROM.updateInt(12, (_menuValueArray_int[3]));
}
String _readStringFromProgmem (char *string)
{
  String result = String("");
  while (pgm_read_byte(string) != '\0')
  {
    result = result + char(pgm_read_byte(string));
    string++;
  }
  return result;
}
String _convertNamber(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)
{
  if (itemType == 4) {
    if (convFormat == 4) {
      return String((_menuValueArray_int[valIndex - 1 ]), DEC);
    }
    if (convFormat == 5) {
      return String((_menuValueArray_int[valIndex - 1]), HEX);
    }
    if (convFormat == 6) {
      return String((_menuValueArray_int[valIndex - 1]), BIN);
    }
  }
  if (itemType == 5) {
    if (convFormat == 4) {
      return String((_menuValueArray_long[valIndex - 1 ]), DEC);
    }
    if (convFormat == 5) {
      return String((_menuValueArray_long[valIndex - 1]), HEX);
    }
    if (convFormat == 6) {
      return String((_menuValueArray_long[valIndex - 1]), BIN);
    }
  }
}
String _convertBoolean(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)
{
  if (convFormat == 1) {
    if (_menuValueArray_bool[valIndex - 1]) {
      return "1";
    } else {
      return "0";
    }
  }
  if (convFormat == 2) {
    if (_menuValueArray_bool[valIndex - 1]) {
      return "True";
    } else {
      return "False";
    }
  }
  if (convFormat == 3) {
    if (_menuValueArray_bool[valIndex - 1 ]) {
      return "";
    } else {
      return "";
    }
  }
  if (_menuValueArray_bool[valIndex - 1]) {
    return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMax - 1])));
  } else {
    return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMin - 1])));
  }
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s)
  {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  }
  else
  {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;   else if (cfg == 0x20) raw = raw & ~3;  else if (cfg == 0x40) raw = raw & ~1;
  }
  return  (float)raw / 16.0;
}
float _readDS18_ow12(byte addr[8], byte type_s)
{ byte data[12];
  byte i;
  _ow12.reset();
  _ow12.select(addr);
  _ow12.write(0xBE);
  for ( i = 0; i < 9; i++) {
    data[i] = _ow12.read();
  }
  _ow12.reset();
  _ow12.select(addr);
  _ow12.write(0x44, 1);
  return _convertDS18x2xData(type_s, data);
}
bool _oneWireSeach (byte array[], OneWire ow )
{
  byte temp[8];
  byte i;
  if ( !ow.search(temp)) {
    return false;
  }
  if (OneWire::crc8(temp, 7) != temp[7]) {
    return false;
  }

  switch (temp[0]) {
    case 0x10:
      array[8] = 1;
      break;
    case 0x28:
      array[8] = 0;
      break;
    case 0x22:
      array[8] = 0;
      break;
    default:
      return false;
  }

  for ( i = 0; i < 8; i++) {
    array[i] = temp[i];
  }
  return true;
}


مصادر المشروع

» مخطط مع درع لوحة مفاتيح LCD ومقاوم
» مخطط مع درع لوحة مفاتيح LCD ومستشعر
» مخطط بلوحة مفاتيح مصفوفة ومقاوم
» مخطط بلوحة مفاتيح مصفوفة ومستشعر

حسنًا ، هذا كل شيء ، إذا لم يكن هناك شيء واضح ، اطرح أسئلة في التعليقات - سأجيب .

Source: https://habr.com/ru/post/ar399097/


All Articles