Création de menus à l'aide de FLProg


Bon après-midi Dans le programme FLProg depuis la version 2.1. des blocs de concepteurs de menus sont apparus. Dans cette leçon, la création d'un menu utilisant ces blocs sera discutée.

Pour être plus intéressant, réfléchissez au vrai problème. Nous assemblons une unité de contrôle de la température, qui comprendra un capteur de température, un radiateur et un ventilateur. De plus, l'inclusion d'un ventilateur ou d'un radiateur sera accompagnée d'un signal sonore. En utilisant le menu, nous allons définir les seuils pour allumer et éteindre les appareils et la nécessité d'un signal audio. Pour simplifier le débogage, nous simulons d'abord le capteur de température à l'aide d'une résistance variable.

La première version de l'appareil sera composée de:

Arduino Uno:
image

Blindage du clavier LCD:
image

Deux blocs relais:


Et un buzzer actif:


Voici un schéma de principe d'un appareil



Pour commencer, tout le projet.
image

Considérez chaque planche individuellement.



Tout est simple ici, nous obtenons la valeur de l'entrée analogique et la mettons à l'échelle dans la plage requise. La valeur de la température passe de -20 à 80. Paramètres du bloc d'échelle.





Sur cette carte, le signal des boutons du blindage du clavier LCD est analysé et les signaux correspondants sont générés. L'analyse est effectuée à l'aide du bloc 5Bin1 personnalisé. La création de ce bloc est abordée dans cette leçon , où vous pouvez télécharger ce bloc.

Puisqu'il n'y a pas assez de boutons sur le bouclier, nous allons étendre les capacités du bouton «Sélectionner».



Ce schéma fonctionne comme suit. Une pression courte sur le bouton génère une impulsion «Entrer dans le menu», une impulsion longue (qui dure plus longtemps que le réglage de la minuterie TON) génère une impulsion «Quitter le menu».



Un signal d'activation de menu est généré sur cette carte. Le temporisateur TON est nécessaire pour se protéger contre la génération accidentelle de ce signal lorsque le contrôleur démarre. Eh bien, directement le tableau avec le bloc de menu principal.



Dans la description du bloc de menu (onglet «Information» de l'éditeur de blocs), j'ai essayé de décrire le fonctionnement du bloc aussi complètement que possible. Considérez la teinture du bloc dans ce cas particulier.

Onglet - «Arborescence des menus»:


L'arborescence des menus se compose de deux groupes de menus pour régler les températures pour allumer et éteindre le chauffage et la ventilation, ainsi que d'un seul élément pour contrôler l'activité sonore. En général, ce bloc vous permet de construire un menu de n'importe quelle complexité et imbrication. L'essentiel est qu'il y ait suffisamment de mémoire de contrôleur.

Définition d'un élément de menu de groupe.


Paramètres pour les paramètres de température.


Je vais clarifier un peu la valeur de départ dans l'EEPROM. Cette valeur est écrite dans l'EEPROM au début du premier cycle après le chargement du programme dans le contrôleur. Cela ne se produira qu'une seule fois après chaque nouveau téléchargement de programme sur le contrôleur. D'autres éléments de menu liés à la température sont similaires à cela.

Paramètres des éléments du menu de contrôle du son:


Les textes pour True et False seront envoyés à ValStr avec les valeurs correspondantes des éléments de menu.

Signet - "Menu Control":


Tout semble intuitif ici.

Signet - «Gestion de la valeur»



Dans le mode de changement sélectionné, lorsque vous appuyez brièvement sur le bouton de changement de valeur, il change selon la valeur de l'étape spécifiée. Si vous maintenez ce bouton enfoncé pendant plus de 2 secondes, la valeur changera de la valeur de l'étape spécifiée toutes les demi-secondes. Si vous continuez à maintenir le bouton enfoncé pendant 2 secondes supplémentaires, la période de changement de valeur passera à 200 ms.

Onglet Quitter


La sortie «Menu principal actif» est nécessaire pour générer un signal «Activer le menu». Les deux planches suivantes sont presque identiques et n'ont pas besoin d'explications particulières.



Je ne ferai attention qu'aux entrées CanValUp des blocs MenuValue. À un niveau élevé sur cette entrée, la valeur à la sortie Q correspond à la valeur de l'élément de menu sélectionné. Sur le bord de fuite de cette entrée, la valeur à la sortie est «gelée» jusqu'à ce qu'un niveau élevé apparaisse à cette entrée. Ceci est nécessaire pour que la valeur ne change pas jusqu'à la fin de son édition (fermeture du menu).

Les tableaux restants sont tout aussi simples et n'ont besoin d'aucune explication.



Résultat de la compilation du projet
#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;
}

Maintenant un peu "pomper" le projet. Remplacez l'écran LCD Keypad Shield par un clavier matriciel 4x4 et un écran 4x4 connectés via I2C.



Cela vous permettra de définir la valeur non pas pas à pas, mais simplement en entrant des chiffres. De plus, cela vous permettra d'accéder au menu avec un mot de passe. Schéma de conception modifié.



L'ensemble du projet.
image

Considérez les cartes modifiées.



Une unité d'interrogation de clavier matricielle standard de la bibliothèque d'éléments est utilisée.



Lorsque vous appuyez sur le bouton "*", le menu est activé. Seulement cette fois, pas le menu principal, mais le menu de saisie du mot de passe.



Paramètres du menu



Mot de passe Ce menu se compose d'un élément utilisé pour entrer un mot de passe. Le type Entier long est utilisé pour augmenter le nombre de caractères de mot de passe.



Sur cette carte, le mot de passe est entré correctement. Si le mot de passe saisi et celui enregistré dans le menu principal correspondent, le menu principal est activé. Lorsque vous quittez le menu, 0 est écrit dans la valeur du mot de passe entré (préparation pour l'entrée suivante)



Un élément a été ajouté à l'arborescence du menu principal pour configurer le mot de passe enregistré.



De plus, les changements ont touché l'onglet "Gestion de la valeur"



Le contrôle de la valeur a été traduit en entrée directe de chiffres. Les planches restantes n'ont pas changé.

Résultat de la compilation du projet
#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])));
  }
}

L'utilisation d'une résistance comme référence de température est pratique pour le débogage, mais dans une application réelle, vous avez toujours besoin d'un capteur de température. Nous utilisons le capteur de température DS18B20. Pour ce faire, vous devez changer la première carte dans les deux projets.



Le bloc ScanOneWare est utilisé pour déterminer automatiquement l'adresse du capteur. Cela vous permet de remplacer, si nécessaire, le capteur de température sans faire clignoter le contrôleur.

Schémas de circuits modifiés
LCD Keypad Shield.







Le résultat du code pour le circuit avec LCD Keypad Shield.
#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;
}

Le code de résultat pour le clavier matriciel
#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;
}


Sources du projet

» Schéma avec écran LCD et blindage du clavier
» Schéma avec écran LCD et blindage du clavier
» Schéma avec clavier matriciel et résistance
» Schéma avec clavier matriciel et capteur

Eh bien, c'est tout, si quelque chose n'est pas clair, posez des questions dans les commentaires - je répondrai .

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


All Articles