Erstellen von Menüs mit FLProg


Guten Tag. Im FLProg-Programm seit Version 2.1. Menü-Designer-Blöcke wurden angezeigt. In dieser Lektion wird das Erstellen eines Menüs mit diesen Blöcken erläutert.

Um interessanter zu sein, betrachten Sie das eigentliche Problem. Wir bauen eine Temperatursteuereinheit zusammen, die einen Temperatursensor, eine Heizung und einen Lüfter enthält. Zusätzlich wird die Aufnahme eines Lüfters oder einer Heizung von einem Tonsignal begleitet. Über das Menü legen wir die Schwellenwerte für das Ein- und Ausschalten der Geräte und die Notwendigkeit eines Audiosignals fest. Um das Debuggen zu vereinfachen, simulieren wir zunächst den Temperatursensor mit einem variablen Widerstand.

Die erste Version des Geräts besteht aus:

Arduino Uno:
Bild

LCD-Tastaturabschirmung:
Bild

Zwei Relaisblöcke:


Und ein aktiver Summer:


Hier ist ein schematisches Diagramm eines Geräts



Für den Anfang das ganze Projekt.
image

Betrachten Sie jedes Board einzeln.



Hier ist alles einfach, wir erhalten den Wert vom Analogeingang und skalieren ihn auf den erforderlichen Bereich. Der Temperaturwert wird von -20 auf 80 geändert. Einstellungen für den Skalierungsblock.





Auf dieser Karte wird das Signal der LCD Keypad Shield-Tasten analysiert und die entsprechenden Signale generiert. Die Analyse wird mit dem benutzerdefinierten 5Bin1-Block durchgeführt. Die Erstellung dieses Blocks wird in dieser Lektion erläutert , in der Sie diesen Block herunterladen können.

Da das Schild nicht genügend Tasten enthält, werden wir die Funktionen der Schaltfläche "Auswählen" erweitern.



Dieses Schema funktioniert wie folgt. Ein kurzer Druck auf die Taste erzeugt einen Impuls „Enter the menu“, ein langer Impuls (der länger dauert als die TON-Timer-Einstellung) erzeugt einen Impuls „Exit the menu“.



Auf dieser Karte wird ein Menüaktivierungssignal erzeugt. Der TON-Timer ist erforderlich, um zu verhindern, dass dieses Signal beim Starten der Steuerung versehentlich erzeugt wird. Nun, direkt die Karte mit dem Hauptmenüblock.



In der Beschreibung des Menüblocks (Registerkarte „Information“ des Blockeditors) habe ich versucht, die Funktionsweise des Blocks so vollständig wie möglich zu beschreiben. Betrachten Sie in diesem speziellen Fall die Tinktur des Blocks.

Registerkarte - "Menübaum":


Der Menübaum besteht aus zwei Gruppen von Menüs zum Einstellen der Temperaturen zum Ein- und Ausschalten der Heizung und Lüftung sowie einem einzelnen Element zur Steuerung der Schallaktivität. Im Allgemeinen können Sie mit diesem Block ein Menü beliebiger Komplexität und Verschachtelung erstellen. Die Hauptsache ist, dass es genügend Controller-Speicher geben würde.

Festlegen eines Gruppenmenüpunkts.


Einstellungen für Temperatureinstellungen.


Ich werde ein wenig über den Startwert im EEPROM klären. Dieser Wert wird zu Beginn des ersten Zyklus nach dem Laden des Programms in die Steuerung in das EEPROM geschrieben. Dies geschieht nur einmal nach jedem neuen Programm-Download auf die Steuerung. Andere temperaturbezogene Menüpunkte sind ähnlich.

Einstellungen für den Menüpunkt Soundsteuerung:


Texte für Wahr und Falsch werden mit den entsprechenden Werten der Menüpunkte an ValStr ausgegeben.

Lesezeichen - "Menüsteuerung":


Hier scheint alles intuitiv zu sein.

Lesezeichen - „Wertverwaltung“



Wenn Sie im ausgewählten Änderungsmodus kurz die Wertänderungstaste drücken, ändert sich diese um den Wert des angegebenen Schritts. Wenn Sie diese Taste länger als 2 Sekunden gedrückt halten, ändert sich der Wert jede halbe Sekunde um den Wert des angegebenen Schritts. Wenn Sie die Taste weitere 2 Sekunden lang gedrückt halten, verringert sich die Dauer der Wertänderung auf 200 ms.

Tab beenden


Der Ausgang „Aktives Hauptmenü“ wird benötigt, um ein Signal „Menü aktivieren“ zu erzeugen. Die nächsten beiden Boards sind fast identisch und bedürfen keiner besonderen Erläuterung.



Ich werde nur auf die CanValUp-Eingaben von MenuValue-Blöcken achten. Bei einem hohen Pegel an diesem Eingang entspricht der Wert am Ausgang Q dem Wert des ausgewählten Menüpunkts. An der Hinterkante dieses Eingangs wird der Wert am Ausgang „eingefroren“, bis an diesem Eingang ein hoher Pegel angezeigt wird. Dies ist erforderlich, damit sich der Wert erst am Ende der Bearbeitung (Schließen des Menüs) ändert.

Die restlichen Boards sind genauso einfach und bedürfen keiner Erklärung.



Ergebnis der Projektzusammenstellung
#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;
}

Nun ein wenig "pumpen" das Projekt. Ersetzen Sie das LCD Keypad Shield durch eine 4x4-Matrixtastatur und ein über I2C angeschlossenes 4x4-Display.



Auf diese Weise können Sie den Wert nicht Schritt für Schritt einstellen, sondern einfach durch Eingabe von Zahlen. Außerdem können Sie so das Menü mit einem Passwort aufrufen. Geändertes Designschema.



Das ganze Projekt.
image

Berücksichtigen Sie die geänderten Karten. Es wird



eine Standard-Matrix-Tastatur-Abfrageeinheit aus der Elementbibliothek verwendet.



Wenn Sie die Taste "*" drücken, wird das Menü aktiviert. Nur diesmal nicht das Hauptmenü, sondern das Menü zur Eingabe des Passworts.



Einstellungen



des Passwortmenüs Dieses Menü besteht aus einem Element, mit dem ein Passwort eingegeben wird. Der Typ Long Integer wird verwendet, um die Anzahl der Kennwortzeichen zu erhöhen.



Auf dieser Karte ist das Passwort korrekt eingegeben. Wenn das eingegebene und das im Hauptmenü gespeicherte Passwort übereinstimmen, wird das Hauptmenü eingeschaltet. Wenn Sie das Menü verlassen, wird 0 auf den Wert des eingegebenen Passworts geschrieben (Vorbereitung für den nächsten Eintrag).



Dem Hauptmenübaum wurde ein Element hinzugefügt, um das gespeicherte Passwort zu konfigurieren.



Die Änderungen berührten auch die Registerkarte "Wertverwaltung".



Die Wertsteuerung wurde in die direkte Zifferneingabe übersetzt. Die restlichen Boards haben sich nicht geändert.

Ergebnis der Projektzusammenstellung
#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])));
  }
}

Die Verwendung eines Widerstands als Temperaturreferenz ist praktisch für das Debuggen, aber in einer realen Anwendung benötigen Sie immer noch einen Temperatursensor. Wir verwenden den Temperatursensor DS18B20. Dazu müssen Sie in beiden Projekten das erste Board ändern.



Der ScanOneWare-Block wird verwendet, um die Sensoradresse automatisch zu bestimmen. Auf diese Weise können Sie den Temperatursensor bei Bedarf austauschen, ohne den Regler zu blinken.

Geänderte Schaltpläne
LCD Keypad Shield.







Das Ergebnis des Codes für die Schaltung mit LCD-Tastaturabschirmung.
#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;
}

Der Ergebniscode für die Matrixtastatur
#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;
}


Quellen Projekte

Schema mit LCD - Tastatur - Schild und Widerstand
Fahren mit LCD - Tastatur - Schild und Sensor
Fahren mit einer Matrix - Tastatur und einem Widerstand
“ Das Fahren eine Matrixtastatur und Sensor

Nun, das ist alles, wenn etwas nicht klar ist, stellen Sie Fragen in den Kommentaren - Antwort .

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


All Articles