Advertisement
nikolas77

gestion terra

Sep 10th, 2020
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 444.71 KB | None | 0 0
  1. //**************************************************************************************************************************************************************************
  2. //**************************************************** Gestion Terrarium v1.0 - Ecran TFT Tactile - Carte Mega (com51) *****************************************************
  3. //**************************************************************************************************************************************************************************
  4. // Page Principale : Affichage de l'heure et de la date courantes.
  5. //                   Affichage de la température et du taux d'humidité courants.
  6. //                   Affichage des seuils de température jour et du taux d'humidité jour et des seuils de température nuit et du taux d'humidité nuit.
  7. //                   Affichage des boutons du ventilateur, du brumisateur et de l'éclairage et changement de la couleur des boutons en fonction de l'état de fonctionnement.
  8. //                   Affichage du bouton d'accès aux menus.
  9. // Menus : Bouton "annuler" pour le retour vers la Page principale et les réglages ne sont pas validés.
  10. //         Bouton "annuler" pour le retour vers la Page 1 des menus et les réglages ne sont pas validés.
  11. //         Boutons "droite" et "gauche" pour se déplacer dans les menus.
  12. //         Boutons "haut" et "bas" pour se déplacer dans les menus.
  13. //         Bouton "ok" pour valider les réglages.
  14. //         Boutons "+" et "-" pour modifier les réglages.
  15. // Mode Jour / Nuit : Menus réglages des seuils de température jour et du taux d'humidité jour et des seuils de température nuit et du taux d'humidité nuit.
  16. //                    Réglage mode Manuel ou Automatique du ventilateur et du brumisateur.
  17. //                    Menu réglages de l'heure de départ jour et de l'heure de départ nuit.
  18. // Programmateur horaire Jour / Nuit de l'éclairage.
  19. // Programmateur horaire pour les repas et lecture d'une mélodie au démarrage du programmateur.
  20. // Réglage de l'heure courante.
  21. // Réglage de la date courante.
  22. // Sortie automatique des menus après un certain délai.
  23. // Restauration dans le menu setup des paramètres par défaut.
  24. // Mode Eco dans le menu setup : Extinction de l'écran TFT par le programmateur horaire Jour / Nuit de l'éclairage.
  25. // Mode Mute dans le menu setup.
  26. // Détection des créneaux horaires des programmateurs au démarrage du programme et dans la restauration dans le menu setup des paramètres par défaut.
  27. //**************************************************************************************************************************************************************************
  28. #include <Adafruit_GFX.h>
  29. #include <MCUFRIEND_kbv.h>
  30. MCUFRIEND_kbv tft;
  31. #include <TouchScreen.h>                                                                                                         // Librairie pour la gestion de la Fonction Tactile de l'écran TFT
  32. #include <Wire.h>                                                                                                               // Librairie pour la communication série avec le Module RTC PCF8523
  33. #include "RTClib.h"                                                                                                             // Librairie pour la gestion de la date et de l'heure du Module RTC PCF8523
  34. #include <Adafruit_BME280.h>                                                                                                    // Librairie pour la gestion du Module BME280
  35. #include "EEPROM.h"                                                                                                             // Librairie pour la gestion de l'EEPROM interne
  36. #include <avr/pgmspace.h>                                                                                                       // Librairie pour la gestion de la Mémoire
  37. #include "Pitches.h"                                                                                                            // Librairie pour la gestion des notes de musique
  38.                                                                                                                                      
  39. RTC_PCF8523 rtc;                                                                                                                // Crée l'objet RTC
  40.  
  41. Adafruit_BME280 bme;                                                                                                            // Crée l'objet bme pour une connexion I2C
  42.  
  43. #define BrocheBuzzer                      53                                                                                    // Broche sortie du Buzzer 5v
  44. #define BrocheLedRougeTemoinVentilateur   52                                                                                    // Broche sortie de la led rouge témoin du ventilateur
  45. #define BrocheLedVerteTemoinBrumisateur   51                                                                                    // Broche sortie de la led verte témoin du brumisateur
  46. #define BrocheLedJauneTemoinEclairage     50                                                                                    // Broche sortie de la led jaune témoin de l'éclairage
  47. #define BrocheLedBleueMelodieRepas        49                                                                                    // Broche sortie de la led bleue mélodie repas
  48.  
  49. #define BrocheRelaisVentilationBoitier    22                                                                                    // Broche sortie relais ventilation boitier
  50. #define BrocheRelaisVentilateur           23                                                                                    // Broche sortie relais ventilateur
  51. #define BrocheRelaisBrumisateur           24                                                                                    // Broche sortie relais brumisateur
  52. #define BrocheRelaisEclairage             25                                                                                    // Broche sortie relais éclairage
  53. #define BrocheRelaisEclairageChauffant    26                                                                                    // Broche sortie relais éclairage chauffant
  54.  
  55.  
  56.  
  57. #define BrocheBPPlusTemperatureModeDemo   47                                                                                    // Broche entrée du bouton poussoir "BPPlusTemperatureModeDemo" pour faire varier la température en mode démo
  58. #define BrocheBPMoinsTemperatureModeDemo  46                                                                                    // Broche entrée du bouton poussoir "BPMoinsTemperatureModeDemo" pour faire varier la température en mode démo
  59. #define BrocheBPPlusHumiditeModeDemo      37                                                                                    // Broche entrée du bouton poussoir "BPPlusHumiditeModeDemo" pour faire varier le taux d'humidité en mode démo
  60. #define BrocheBPMoinsHumiditeModeDemo     48                                                                                    // Broche entrée du bouton poussoir "BPMoinsHumiditeModeDemo" pour faire varier le taux d'humidité en mode démo
  61. #define BrocheLedVerteTemoinModeDemo      45                                                                                    // Broche sortie de la led verte témoin du mode démo
  62.  
  63. uint8_t YP = A3;                                                                                                                // Broche pour la fonction tactile de l'écran TFT
  64. uint8_t XM = A2;                                                                                                                // Broche pour la fonction tactile de l'écran TFT
  65. uint8_t YM = 9;                                                                                                                 // Broche pour la fonction tactile de l'écran TFT
  66. uint8_t XP = 8;                                                                                                                 // Broche pour la fonction tactile de l'écran TFT
  67.  
  68. uint16_t TS_LEFT = 953;                                                                                                         // Calibrage de l'écran pour la fonction tactile
  69. uint16_t TS_RT  = 73;
  70. uint16_t TS_TOP = 901;
  71. uint16_t TS_BOT = 137;
  72.  
  73. TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);                                                                              // Crée l'objet ts
  74. TSPoint tp;                                                                                                                     // Crée l'objet tp
  75.  
  76. #define PressionMin 5                                                                                                           // Pression Min et Max acceptées
  77. #define PressionMax 1000
  78.  
  79. #define BLACK           0x0000                                                                                                  // Variables contenant la valeur sur 16 bits des couleurs
  80. #define LIGHTBLUE       0x34DF
  81. #define BLUE            0x001F
  82. #define VERYDARKBLUE    0x0005
  83. #define LIGHTRED        0xF945
  84. #define RED             0xF800
  85. #define DARKRED         0x8800
  86. #define VERYDARKRED     0x3800
  87. #define GREEN           0x07E0
  88. #define VERYDARKGREEN   0x0140
  89. #define KHAKIGREEN      0x195B62
  90. #define CYAN            0x07FF
  91. #define VERYDARKCYAN    0x0145
  92. #define MAGENTA         0xF81F
  93. #define VERYDARKMAGENTA 0x3803
  94. #define YELLOW          0xFFE0
  95. #define VERYDARKYELLOW  0x3180
  96. #define WHITE           0xFFFF
  97. #define VERYDARKGRAY    0x2124
  98. #define GRAY            0xA514
  99. #define ORANGE          0xFC21
  100. #define VERYDARKORANGE  0x4920
  101.  
  102. uint16_t g_identifier;                                                                                                          // Identifiant de l'écran TFT
  103. uint8_t OrientationTFT = 1;                                                                                                     // Variable contenant le sens d'affichage de l'écran TFT
  104.  
  105. unsigned long tempoPression = 0;                                                                                                // Début de la temporisation entre deux pressions sur l'écran tactile TFT
  106.  
  107. int Hrs = 0;                                                                                                                    // Heure courante
  108. int Mins = 0;                                                                                                                   // Minute courante
  109. int Secs = 0;                                                                                                                   // Seconde courante
  110. int LastMins = -1;                                                                                                              // Dernières minutes courantes
  111. int LastSecs = -1;
  112. int HrsReglage = 0;                                                                                                             // Heures de réglage
  113. int MinsReglage = 0;                                                                                                            // Minutes de réglage
  114. int LastHrsReglage = -1;                                                                                                        // Dernières heures de réglage
  115. int LastMinsReglage = -1;                                                                                                       // Dernières minutes de réglage
  116.  
  117. int Jour = 0;                                                                                                                   // Jour du mois de la date courante (1 à 31)
  118. int Mois = 0;                                                                                                                   // Mois de la date courante (1 à 12)
  119. int Annee = 0;                                                                                                                  // Année de la date courante
  120. int JourSemaine = 0;                                                                                                            // Jour de la semaine courant (0 à 6 : 0 = Dimanche etc...)
  121. int LastJour = -1;                                                                                                              // Dernier jour du mois courant
  122. int LastJourSemaine = -1;                                                                                                       // Dernier jour de la semaine
  123.  
  124. int JourReglage = 0;                                                                                                            // Jour de réglage
  125. int MoisReglage = 0;                                                                                                            // Mois de réglage
  126. int AnneeReglage = 0;                                                                                                           // Année de réglage
  127. int LastJourReglage = -1;                                                                                                       // Dernier jour de réglage
  128. int LastMoisReglage = -1;                                                                                                       // Dernier mois de réglage
  129. int LastAnneeReglage = -1;                                                                                                      // Dernière année de réglage
  130.  
  131. int PageCourante = 0;                                                                                                           // Page courante
  132. int LastPageCourante = -1;                                                                                                      // Dernière Page courante
  133.  
  134. float TemperatureCourante = 0.0;                                                                                                // Température courante relevée par le capteur BME280
  135. float LastTemperatureCourante = -100.0;                                                                                         // Dernière température courante relevée par le capteur BME280
  136.  
  137. float TauxHumiditeCourant = 0.0;                                                                                                // Taux d'humidité courant relevé par le capteur BME280
  138. float LastTauxHumiditeCourant = -1;                                                                                             // Dernier taux d'humidité courant relevé par le capteur BME280
  139.  
  140. float SeuilTemperatureJour = 42.0;                                                                                              // Seuil de jour de la température par défaut au dessus duquel le ventilateur s'active
  141. float LastSeuilTemperatureJour = -100.0;                                                                                        // Dernier seuil de jour de la température
  142. float SeuilTemperatureJourReglage = 0.0;                                                                                        // Seuil de jour de réglage de la température
  143. float LastSeuilTemperatureJourReglage = -100.0;                                                                                 // Dernier seuil de jour de réglage de la température
  144. int ModeManuelTemperature = 0;                                                                                                  // Indicateur du mode manuel de la température
  145. int ModeManuelTemperatureReglage = 0;                                                                                           // Indicateur de réglage du mode manuel de la température
  146. int LastModeManuelTemperatureReglage = -1;                                                                                      // Dernier indicateur de réglage du mode manuel de la température
  147. const float SeuilMaxTemperatureJourReglage = 42.0;                                                                              // Seuil de jour max de réglage de la température
  148. const float SeuilMinTemperatureJourReglage = 30.0;                                                                              // Seuil de jour min de réglage de la température
  149.  
  150. float SeuilTemperatureNuit = 30.0;                                                                                              // Seuil de nuit de la température par défaut au dessus duquel le ventilateur s'active
  151. float LastSeuilTemperatureNuit = -100.0;                                                                                        // Dernier seuil de nuit de la température
  152. float SeuilTemperatureNuitReglage = 0.0;                                                                                        // Seuil de nuit de réglage de la température
  153. float LastSeuilTemperatureNuitReglage = -100.0;                                                                                 // Dernier seuil de nuit de réglage de la température
  154. const float SeuilMaxTemperatureNuitReglage = 30.0;                                                                              // Seuil de nuit max de réglage de la température
  155. const float SeuilMinTemperatureNuitReglage = 25.0;                                                                              // Seuil de nuit min de réglage de la température
  156.  
  157. float SeuilHumiditeJour = 25.5;                                                                                                 // Seuil de jour du taux d'humidité par défaut au dessous duquel le brumisateur s'active
  158. float LastSeuilHumiditeJour = -1.0;                                                                                             // Dernier seuil de jour du taux d'humidité
  159. float SeuilHumiditeJourReglage = 0.0;                                                                                           // Seuil de jour de réglage du taux d'humidité
  160. float LastSeuilHumiditeJourReglage = -1.0;                                                                                      // Dernier seuil de jour de réglage du taux d'humidité
  161. int ModeManuelHumidite = 0;                                                                                                     // Indicateur du mode manuel du taux d'humidité
  162. int ModeManuelHumiditeReglage = 0;                                                                                              // Indicateur de réglage du mode manuel du taux d'humidité
  163. int LastModeManuelHumiditeReglage = -1;                                                                                         // Dernier indicateur de réglage du mode manuel du taux d'humidité
  164. const float SeuilMaxHumiditeJourReglage = 30.0;                                                                                 // Seuil de jour max de réglage du taux d'humidité
  165. const float SeuilMinHumiditeJourReglage = 10.0;                                                                                 // Seuil de jour min de réglage du taux d'humidité
  166.  
  167. float SeuilHumiditeNuit = 50.0;                                                                                                 // Seuil de nuit du taux d'humidité par défaut au dessous duquel le brumisateur s'active
  168. float LastSeuilHumiditeNuit = -1.0;                                                                                             // Dernier seuil de nuit du taux d'humidité
  169. float SeuilHumiditeNuitReglage = 0.0;                                                                                           // Seuil de nuit de réglage du taux d'humidité
  170. float LastSeuilHumiditeNuitReglage = -1.0;                                                                                      // Dernier seuil de nuit de réglage du taux d'humidité
  171. const float SeuilMaxHumiditeNuitReglage = 60.0;                                                                                 // Seuil de nuit max de réglage du taux d'humidité
  172. const float SeuilMinHumiditeNuitReglage = 30.0;                                                                                 // Seuil de nuit min de réglage du taux d'humidité
  173.  
  174. float SeuilTemperatureJourNuit = SeuilTemperatureJour;                                                                          // Seuil jour / nuit de température
  175. float SeuilHumiditeJourNuit = SeuilHumiditeJour;                                                                                // Seuil jour / nuit du taux d'humidité
  176. int ModeJourSeuilTemperature = 0;                                                                                               // Indicateur du mode jour pour les seuils de la température par défaut
  177. int LastModeJourSeuilTemperature = -1;                                                                                          // Dernier indicateur du mode jour pour les seuils de la température
  178. int ModeJourSeuilHumidite = 0;                                                                                                  // Indicateur du mode jour pour les seuils du taux d'humidité par défaut
  179. int LastModeJourSeuilHumidite = -1;                                                                                             // Dernier indicateur du mode jour pour les seuils du taux d'humidité
  180.  
  181. int HrsDepartSeuilsModeJour = 9;                                                                                                // Heures départ seuils mode jour par défaut
  182. int MinsDepartSeuilsModeJour = 00;                                                                                              // Minutes départ seuils mode jour par défaut
  183. int HrsDepartSeuilsModeNuit = 22;                                                                                               // Heures départ seuils mode nuit par défaut
  184. int MinsDepartSeuilsModeNuit = 30;                                                                                              // Minutes départ seuils mode nuit par défaut
  185. int HrsDepartSeuilsModeJourReglage = 0;                                                                                         // Heures départ de réglage seuils mode jour
  186. int MinsDepartSeuilsModeJourReglage = 0;                                                                                        // Minutes départ de réglage seuils mode jour
  187. int HrsDepartSeuilsModeNuitReglage = 0;                                                                                         // Heures départ de réglage seuils mode nuit
  188. int MinsDepartSeuilsModeNuitReglage = 0;                                                                                        // Minutes départ de réglage seuils mode nuit
  189. int LastHrsDepartSeuilsModeJourReglage = -1;                                                                                    // Dernières heures départ de réglage seuils mode jour
  190. int LastMinsDepartSeuilsModeJourReglage = -1;                                                                                   // Dernières minutes départ de réglage seuils mode jour
  191. int LastHrsDepartSeuilsModeNuitReglage = -1;                                                                                    // Dernières heures départ de réglage seuils mode nuit
  192. int LastMinsDepartSeuilsModeNuitReglage = -1;                                                                                   // Dernières minutes départ de réglage seuils mode nuit
  193. int hStartSeuilsModeJour = 0;                                                                                                   // Variable contenant les heures et les minutes de départ seuils mode jour converties en un seul nombre entier
  194. int hStopSeuilsModeJour = 0;                                                                                                    // Variable contenant les heures et les minutes de départ seuils mode nuit converties en un seul nombre entier
  195. boolean ProgSeuilsModeJourStarted = false;                                                                                      // Indicateur de déclenchement seuils mode jour
  196. boolean ProgSeuilsModeNuitStarted = false;                                                                                      // Indicateur de déclenchement seuils mode nuit
  197.  
  198. boolean EtatVentilateur = LOW;                                                                                                  // Indicateur d'état du fonctionnement du ventilateur
  199. boolean LastEtatVentilateur = HIGH;                                                                                             // Indicateur du dernier état du fonctionnement du ventilateur
  200. int16_t coulBoutonVentilateur;                                                                                                  // Couleur courante du bouton "VENTILATEUR" de la Page 0
  201.  
  202. boolean EtatBrumisateur = LOW;                                                                                                  // Indicateur d'état du fonctionnement du brumisateur
  203. boolean LastEtatBrumisateur = HIGH;                                                                                             // Indicateur du dernier état du fonctionnement du brumisateur
  204. int16_t coulBoutonBrumisateur;                                                                                                  // Couleur courante du bouton "BRUMISATEUR" de la Page 0
  205.  
  206. boolean EtatEclairage = LOW;                                                                                                    // Indicateur d'état du fonctionnement de l'éclairage
  207. boolean LastEtatEclairage = HIGH;                                                                                               // Indicateur du dernier état du fonctionnement de l'éclairage
  208. int16_t coulBoutonEclairage;                                                                                                    // Couleur courante du bouton "ECLAIRAGE" de la Page 0
  209.  
  210. int HrsDepartProgHoraireEclairage = 8;                                                                                          // Heures de départ du programmateur horaire de l'éclairage par défaut
  211. int MinsDepartProgHoraireEclairage = 30;                                                                                        // Minutes de départ du programmateur horaire de l'éclairage par défaut
  212. int HrsArretProgHoraireEclairage = 22;                                                                                          // Heures d'arrêt du programmateur horaire de l'éclairage par défaut
  213. int MinsArretProgHoraireEclairage = 00;                                                                                         // Minutes d'arrêt du programmateur horaire de l'éclairage par défaut
  214. int ModeProgHoraireEclairage = 1;                                                                                               // Indicateur du mode de fonctionnement du programmateur horaire de l'éclairage par défaut
  215. int IterationProgHoraireEclairage [] = {1, 1, 1, 1, 1, 1, 1};                                                                   // Itération du programmateur horaire de l'éclairage par défaut
  216. int HrsDepartProgHoraireEclairageReglage = 0;                                                                                   // Heures de départ de réglage du programmateur horaire de l'éclairage
  217. int MinsDepartProgHoraireEclairageReglage = 0;                                                                                  // Minutes de départ de réglage du programmateur horaire de l'éclairage
  218. int HrsArretProgHoraireEclairageReglage = 0;                                                                                    // Heures d'arrêt de réglage du programmateur horaire de l'éclairage
  219. int MinsArretProgHoraireEclairageReglage = 0;                                                                                   // Minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  220. int ModeProgHoraireEclairageReglage = 0;                                                                                        // Indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage
  221. int IterationProgHoraireEclairageReglage [] = {0, 0, 0, 0, 0, 0, 0};                                                            // Itération de réglage du programmateur horaire de l'éclairage
  222. int LastHrsDepartProgHoraireEclairageReglage = -1;                                                                              // Dernières heures de départ de réglage du programmateur horaire de l'éclairage
  223. int LastMinsDepartProgHoraireEclairageReglage = -1;                                                                             // Dernières minutes de départ de réglage du programmateur horaire de l'éclairage
  224. int LastHrsArretProgHoraireEclairageReglage = -1;                                                                               // Dernières heures d'arrêt de réglage du programmateur horaire de l'éclairage
  225. int LastMinsArretProgHoraireEclairageReglage = -1;                                                                              // Dernières minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  226. int LastModeProgHoraireEclairageReglage = -1;                                                                                   // Dernier indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage
  227. int LastIterationProgHoraireEclairageReglage [] = {-1, -1, -1, -1, -1, -1, -1};                                                 // Dernière itération de réglage du programmateur horaire de l'éclairage
  228. int hStartProgHoraireEclairage = 0;                                                                                             // Variable contenant les heures et les minutes de départ du programmateur horaire de l'éclairage converties en un seul nombre entier
  229. int hStopProgHoraireEclairage = 0;                                                                                              // Variable contenant les heures et les minutes d'arrêt du programmateur horaire de l'éclairage converties en un seul nombre entier
  230. boolean ProgHoraireEclairageStarted = false;                                                                                    // Indicateur de déclenchement du programmateur horaire de l'éclairage
  231. boolean ProgHoraireEclairageStopped = false;                                                                                    // Indicateur d'arrêt du programmateur horaire de l'éclairage
  232.  
  233. int HrsDepart1ProgHoraireRepas = 11;                                                                                             // Heures de départ1 du programmateur horaire des repas par défaut
  234. int MinsDepart1ProgHoraireRepas = 30;                                                                                           // Minutes de départ1 du programmateur horaire des repas par défaut
  235. int HrsDepart2ProgHoraireRepas = 20;                                                                                            // Heures de départ2 du programmateur horaire des repas par défaut
  236. int MinsDepart2ProgHoraireRepas = 30;                                                                                           // Minutes de départ2 du programmateur horaire des repas par défaut
  237. int HrsDepart1ProgHoraireRepasReglage = 0;                                                                                      // Heures de départ1 de réglage du programmateur horaire des repas
  238. int MinsDepart1ProgHoraireRepasReglage = 0;                                                                                     // Minutes de départ1 de réglage du programmateur horaire des repas
  239. int HrsDepart2ProgHoraireRepasReglage = 0;                                                                                      // Heures de départ2 de réglage du programmateur horaire des repas
  240. int MinsDepart2ProgHoraireRepasReglage = 0;                                                                                     // Minutes de départ2 de réglage du programmateur horaire des repas
  241. int LastHrsDepart1ProgHoraireRepasReglage = -1;                                                                                 // Dernières heures de départ1 de réglage du programmateur horaire des repas
  242. int LastMinsDepart1ProgHoraireRepasReglage = -1;                                                                                // Dernières minutes de départ1 de réglage du programmateur horaire des repas
  243. int LastHrsDepart2ProgHoraireRepasReglage = -1;                                                                                 // Dernières heures de départ2 de réglage du programmateur horaire des repas
  244. int LastMinsDepart2ProgHoraireRepasReglage = -1;                                                                                // Dernières minutes de départ2 de réglage du programmateur horaire des repas
  245. int ModeProgHoraireRepas = 1;                                                                                                   // Mode de fonctionnement du programmateur horaire des repas par defaut
  246. int ModeProgHoraireRepasReglage = 0;                                                                                            // Indicateur de réglage du mode de fonctionnement du programmateur horaire des repas
  247. int LastModeProgHoraireRepasReglage = -1;                                                                                       // Dernier indicateur de réglage du mode de fonctionnement du programmateur horaire des repas
  248. int IterationProgHoraireRepas [] = {1, 1, 1, 1, 1, 1, 1};                                                                       // Itération du programmateur horaire des repas par défaut
  249. int IterationProgHoraireRepasReglage [] = {0, 0, 0, 0, 0, 0, 0};                                                                // Itération de réglage du programmateur horaire des repas
  250. int LastIterationProgHoraireRepasReglage [] = {-1, -1, -1, -1, -1, -1, -1};                                                     // Dernière itération de réglage du programmateur horaire des repas
  251.  
  252.  
  253. unsigned long t1DebutTempoReactivationAffichagePages = 0;                                                                       // Début de la temporisation avant la réactivation d'affichage des Pages
  254. unsigned long TempoReactivationAffichagePages = 3000ul;                                                                         // Durée avant la réactivation d'affichage des Pages
  255. boolean etatReactivationAffichagePages = true;                                                                                  // Indicateur de réactivation d'affichage des Pages
  256.  
  257. unsigned long t1DebutTempoSortieAutoMenus = 0;                                                                                  // Début de la temporisation de sortie automatique des menus
  258. unsigned long TempoSortieAutoMenus = 30000ul;                                                                                   // Durée de la temporisation de sortie automatique des menus
  259.  
  260. boolean etatBoutonReglagesDefaut = false;                                                                                       // Etat du bouton "REGLAGES PAR DEFAUT"
  261. boolean LastetatBoutonReglagesDefaut = false;                                                                                   // Dernier état du bouton "REGLAGES PAR DEFAUT"
  262. int etatBoutonReglagesModeEco = 0;                                                                                              // Etat du bouton "MODE ECO ON/OFF"
  263. int LastetatBoutonReglagesModeEco = -1;                                                                                         // Dernier état du bouton "MODE ECO ON/OFF"
  264. int etatBoutonReglagesModeMute = 0;                                                                                             // Etat du bouton "MODE MUTE ON/OFF"
  265. int LastetatBoutonReglagesModeMute = -1;                                                                                        // Dernier état du bouton "MODE MUTE ON/OFF"
  266.  
  267. boolean ModeEco = true;                                                                                                         // Indicateur du mode Eco
  268. boolean EcranTFTOFF = false;                                                                                                    // Indicateur de l'état de l'écran TFT
  269. boolean EcranTFTONTemporaire = false;                                                                                           // Indicateur temporaire ON de l'écran TFT
  270.  
  271. boolean ModeMute = false;                                                                                                       // Indicateur du mode Mute
  272.  
  273. unsigned long t1DebutTempoBrumisateurON = 0;                                                                                    // Début de la temporisation d'activation du brumisateur pour interdire des démarrages si le taux d'humidité varie autour du seuil du taux d'humidité
  274. unsigned long t1DebutTempoVentilateurON = 0;                                                                                    // Début de la temporisation d'activation du ventilateur pour interdire des démarrages si le taux d'humidité varie autour du seuil du taux d'humidité
  275.  
  276. boolean ModeDemo = false;                                                                                                       // Indicateur du mode démo pour faire varier la température et le taux d'humidité avec des boutons poussoirs
  277. boolean EtatBPPlusTemperatureModeDemo = HIGH;                                                                                   // Etat courant du bouton poussoir "BPPlusTemperatureModeDemo" pour faire varier la température en mode démo
  278. boolean EtatBPMoinsTemperatureModeDemo = HIGH;                                                                                  // Etat courant du bouton poussoir "BPMoisTemperatureModeDemo" pour faire varier la température en mode démo
  279. boolean EtatBPPlusHumiditeModeDemo = HIGH;                                                                                      // Etat courant du bouton poussoir "BPPlusHumiditeModeDemo" pour faire varier le taux d'humidité en mode démo
  280. boolean EtatBPMoinsHumiditeModeDemo = HIGH;                                                                                     // Etat courant du bouton poussoir "BPMoisHumiditeModeDemo" pour faire varier le taux d'humidité en mode démo
  281.  
  282. const char message1[]  PROGMEM = "GESTION DU TERRARIUM A MARLEY";                                                                      // Messages TFT stockés en mémoire programme (Flash)
  283. const char message2[]  PROGMEM = "SEUIL TEMPERATURE JOUR";
  284. const char message3[]  PROGMEM = "SEUIL TAUX HUMIDITE JOUR";
  285. const char message4[]  PROGMEM = "VENTILATEUR";
  286. const char message5[]  PROGMEM = "BRUMISATEUR";
  287. const char message6[]  PROGMEM = "NEONS";
  288. const char message7[]  PROGMEM = "MENUS";
  289. const char message8[]  PROGMEM = "REGLAGE SEUIL TEMPERATURE JOUR";
  290. const char message9[]  PROGMEM = "REGLAGE SEUIL HUMIDITE JOUR";
  291. const char message10[] PROGMEM = "TEMPERATURE COURANTE";
  292. const char message11[] PROGMEM = "SEUIL TEMPERATURE NUIT";
  293. const char message12[] PROGMEM = "MODE";
  294. const char message13[] PROGMEM = "SEUIL HUMIDITE JOUR";
  295. const char message14[] PROGMEM = "REGLAGE SEUIL TEMPERATURE NUIT";
  296. const char message15[] PROGMEM = "REGLAGE SEUIL HUMIDITE NUIT";
  297. const char message16[] PROGMEM = "SEUIL HUMIDITE NUIT";
  298. const char message17[] PROGMEM = "TAUX HUMIDITE COURANT";
  299. const char message18[] PROGMEM = "MANUEL";
  300. const char message19[] PROGMEM = "REGLAGE HEURES SEUILS JOUR/NUIT";
  301. const char message20[] PROGMEM = "DEPART JOUR";
  302. const char message21[] PROGMEM = "DEPART NUIT";
  303. const char message22[] PROGMEM = "SEUIL TAUX HUMIDITE NUIT";
  304. const char message23[] PROGMEM = "REGLAGE PROGRAMMATEUR ECLAIRAGE";
  305. const char message24[] PROGMEM = "DEPART :";
  306. const char message25[] PROGMEM = "ARRET  :";
  307. const char message26[] PROGMEM = "AUTO";
  308. const char message27[] PROGMEM = "VALIDATION";
  309. const char message28[] PROGMEM = "REGLAGES";
  310. const char message29[] PROGMEM = "DEPART";
  311. const char message30[] PROGMEM = "ARRET";
  312. const char message31[] PROGMEM = "REGLAGE PROGRAMMATEUR REPAS";
  313. const char message32[] PROGMEM = "HEURE REPAS 1";
  314. const char message33[] PROGMEM = "HEURE REPAS 2";
  315. const char message34[] PROGMEM = "REGLAGE DE L'HEURE COURANTE";
  316. const char message35[] PROGMEM = "REGLAGE DE LA DATE COURANTE";
  317. const char message36[] PROGMEM = "ON";
  318. const char message37[] PROGMEM = "OFF";
  319. const char message38[] PROGMEM = "JOUR";
  320. const char message39[] PROGMEM = "MOIS";
  321. const char message40[] PROGMEM = "ANNEE";
  322. const char message41[] PROGMEM = "OK";
  323. const char message42[] PROGMEM = "IL EST :";
  324. const char message43[] PROGMEM = "C'EST L'HEURE DU PREMIER REPAS";
  325. const char message44[] PROGMEM = "C'EST L'HEURE DU DEUXIEME REPAS";
  326. const char message45[] PROGMEM = "APPUYEZ SUR OK POUR SORTIR";
  327. const char message46[] PROGMEM = "MENU SETUP";
  328. const char message47[] PROGMEM = "REGLAGES PAR DEFAUT";
  329. const char message48[] PROGMEM = "MODE ECO";
  330. const char message49[] PROGMEM = "ACTIVE";
  331. const char message50[] PROGMEM = "MODE ECO ON";
  332. const char message51[] PROGMEM = "MODE ECO OFF";
  333. const char message52[] PROGMEM = "MODE MUTE ON";
  334. const char message53[] PROGMEM = "MODE MUTE OFF";
  335. const char message54[] PROGMEM = "ANNULES";
  336. const char message55[] PROGMEM = "ATTENTION";
  337. const char message56[] PROGMEM = "LES HEURES DE DEPART";
  338. const char message57[] PROGMEM = "SONT EGALES";
  339. const char message58[] PROGMEM = "AUX HEURES D'ARRET";
  340. const char message59[] PROGMEM = "LES HEURES DE JOUR";
  341. const char message60[] PROGMEM = "AUX HEURES DE NUIT";
  342. const char message61[] PROGMEM = "LES HEURES DU REPAS 1";
  343. const char message62[] PROGMEM = "AUX HEURES DU REPAS 2";
  344. const char message63[] PROGMEM = "ON/OFF";
  345. const char message64[] PROGMEM = "REPAS 1 :";
  346. const char message65[] PROGMEM = "REPAS 2 :";
  347.  
  348. void setup()
  349. {
  350.   Serial.begin(9600);                                                                                                           // Démarre la communication série avec la console
  351.  
  352.   pinMode(BrocheBuzzer, OUTPUT);                                                                                                // Configure les broches en sorties
  353.   pinMode(BrocheLedRougeTemoinVentilateur, OUTPUT);
  354.   pinMode(BrocheLedVerteTemoinBrumisateur, OUTPUT);
  355.   pinMode(BrocheLedJauneTemoinEclairage, OUTPUT);
  356.   pinMode(BrocheLedBleueMelodieRepas, OUTPUT);
  357.   pinMode(BrocheLedVerteTemoinModeDemo, OUTPUT);
  358.  
  359.   pinMode(BrocheRelaisVentilateur, OUTPUT);
  360.   pinMode(BrocheRelaisBrumisateur, OUTPUT);
  361.   pinMode(BrocheRelaisEclairage, OUTPUT);
  362.  
  363.  
  364.   pinMode(BrocheRelaisEclairageChauffant, OUTPUT);
  365.   pinMode(BrocheRelaisVentilationBoitier, OUTPUT);
  366.  
  367.  
  368.  
  369.   pinMode(BrocheBPPlusTemperatureModeDemo, INPUT_PULLUP);                                                                       // Configure les broches en entrées
  370.   pinMode(BrocheBPMoinsTemperatureModeDemo, INPUT_PULLUP);
  371.   pinMode(BrocheBPPlusHumiditeModeDemo, INPUT_PULLUP);
  372.   pinMode(BrocheBPMoinsHumiditeModeDemo, INPUT_PULLUP);
  373.  
  374.   int codeEEPROM1 = 0;                                                                                                          // Initialisation de l'EEPROM à la première utilisation
  375.   int codeEEPROM2 = 0;
  376.   EEPROM.get(500, codeEEPROM1);                                                                                                 // Lit les codes d'initialisation de l'EEPROM
  377.   EEPROM.get(502, codeEEPROM2);
  378.  
  379.   if (codeEEPROM1 != 7731 || codeEEPROM2 != 7732)                                                                               // Si les codes d'initialisation ne sont pas présents
  380.   {
  381.     EEPROM.put(0, SeuilTemperatureJour);                                                                                        // Initialise le seuil de jour de la température par défaut si EEPROM non configurée
  382.     EEPROM.put(4, SeuilHumiditeJour);                                                                                           // Initialise le seuil de jour du taux d'humidité par défaut si EEPROM non configurée
  383.     EEPROM.put(8, ModeManuelTemperature);                                                                                       // Initialise l'indicateur du mode manuel de la température par défaut si EEPROM non configurée
  384.     EEPROM.put(12, ModeManuelHumidite);                                                                                         // Initialise l'indicateur du mode manuel du taux d'humidité par défaut si EEPROM non configurée
  385.     EEPROM.put(16, SeuilTemperatureNuit);                                                                                       // Initialise le seuil de nuit de la température par défaut si EEPROM non configurée
  386.     EEPROM.put(20, SeuilHumiditeNuit);                                                                                          // Initialise le seuil de nuit du taux d'humidité par défaut si EEPROM non configurée
  387.     EEPROM.put(24, HrsDepartSeuilsModeJour);                                                                                    // Initialise les heures de départ seuils mode jour par défaut si EEPROM non configurée
  388.     EEPROM.put(28, MinsDepartSeuilsModeJour);                                                                                   // Initialise les minutes de départ seuils mode jour par défaut si EEPROM non configurée
  389.     EEPROM.put(32, HrsDepartSeuilsModeNuit);                                                                                    // Initialise les heures de départ seuils mode nuit par défaut si EEPROM non configurée
  390.     EEPROM.put(36, MinsDepartSeuilsModeNuit);                                                                                   // Initialise les minutes de départ seuils mode nuit par défaut si EEPROM non configurée
  391.     EEPROM.put(40, HrsDepartProgHoraireEclairage);                                                                              // Initialise les heures de départ du programmateur horaire de l'éclairage par défaut si EEPROM non configurée
  392.     EEPROM.put(44, MinsDepartProgHoraireEclairage);                                                                             // Initialise les minutes de départ du programmateur horaire de l'éclairage par défaut si EEPROM non configurée
  393.     EEPROM.put(48, HrsArretProgHoraireEclairage);                                                                               // Initialise les heures d'arrêt du programmateur horaire de l'éclairage par défaut si EEPROM non configurée
  394.     EEPROM.put(52, MinsArretProgHoraireEclairage);                                                                              // Initialise les minutes d'arrêt du programmateur horaire de l'éclairage par défaut si EEPROM non configurée
  395.     EEPROM.put(56, ModeProgHoraireEclairage);                                                                                   // Initialise l'indicateur du mode de fonctionnement du programmateur horaire de l'éclairage par défaut si EEPROM non configurée
  396.     for (int i = 0; i < 7; i++)                                                                                                 // Initialise l'itération du programmateur horaire de l'éclairage par défaut si EEPROM non configurée
  397.     {
  398.       EEPROM.put(60 + i*4, IterationProgHoraireEclairage[i]);
  399.     }
  400.     EEPROM.put(88, HrsDepart1ProgHoraireRepas);                                                                                 // Initialise les heures de départ1 du programmateur horaire des repas par défaut si EEPROM non configurée
  401.     EEPROM.put(92, MinsDepart1ProgHoraireRepas);                                                                                // Initialise les minutes de départ1 du programmateur horaire des repas par défaut si EEPROM non configurée
  402.     EEPROM.put(96, HrsDepart2ProgHoraireRepas);                                                                                 // Initialise les heures de départ2 du programmateur horaire des repas par défaut si EEPROM non configurée
  403.     EEPROM.put(100, MinsDepart2ProgHoraireRepas);                                                                               // Initialise les minutes de départ2 du programmateur horaire des repas par défaut si EEPROM non configurée
  404.     EEPROM.put(104, ModeEco);                                                                                                   // Initialise l'indicateur du mode Eco par défaut si EEPROM non configurée
  405.     EEPROM.put(108, ModeMute);                                                                                                  // Initialise l'indicateur du mode Mute par défaut si EEPROM non configurée
  406.     EEPROM.put(112, ModeProgHoraireRepas);                                                                                      // Initialise le mode de fonctionnement du programmateur horaire des repas par defaut si EEPROM non configurée
  407.     for (int i = 0; i < 7; i++)                                                                                                 // Initialise l'itération du programmateur horaire des repas par défaut si EEPROM non configurée
  408.     {
  409.       EEPROM.put(116 + i*4, IterationProgHoraireRepas[i]);
  410.     }
  411.    
  412.     EEPROM.put(500, 7731);                                                                                                      // Mémorise les codes d'initialisation de l'EEPROM
  413.     EEPROM.put(502, 7732);
  414.   }
  415.  
  416.   EEPROM.get(0, SeuilTemperatureJour);                                                                                          // Restaure le seuil de jour de la température
  417.   EEPROM.get(4, SeuilHumiditeJour);                                                                                             // Restaure le seuil de jour du taux d'humidité
  418.   EEPROM.get(8, ModeManuelTemperature);                                                                                         // Restaure l'indicateur du mode manuel de la température
  419.   EEPROM.get(12, ModeManuelHumidite);                                                                                           // Restaure l'indicateur du mode manuel du taux d'humidité
  420.   EEPROM.get(16, SeuilTemperatureNuit);                                                                                         // Restaure le seuil de nuit de la température
  421.   EEPROM.get(20, SeuilHumiditeNuit);                                                                                            // Restaure le seuil de nuit du taux d'humidité
  422.   EEPROM.get(24, HrsDepartSeuilsModeJour);                                                                                      // Restaure les heures de départ seuils mode jour
  423.   EEPROM.get(28, MinsDepartSeuilsModeJour);                                                                                     // Restaure les minutes de départ seuils mode jour
  424.   EEPROM.get(32, HrsDepartSeuilsModeNuit);                                                                                      // Restaure les heures de départ seuils mode nuit
  425.   EEPROM.get(36, MinsDepartSeuilsModeNuit);                                                                                     // Restaure les minutes de départ seuils mode jour
  426.   EEPROM.get(40, HrsDepartProgHoraireEclairage);                                                                                // Restaure les heures de départ du programmateur horaire de l'éclairage
  427.   EEPROM.get(44, MinsDepartProgHoraireEclairage);                                                                               // Restaure les minutes de départ du programmateur horaire de l'éclairage
  428.   EEPROM.get(48, HrsArretProgHoraireEclairage);                                                                                 // Restaure les heures d'arrêt du programmateur horaire de l'éclairage
  429.   EEPROM.get(52, MinsArretProgHoraireEclairage);                                                                                // Restaure les minutes d'arrêt du programmateur horaire de l'éclairage
  430.   EEPROM.get(56, ModeProgHoraireEclairage);                                                                                     // Restaure l'indicateur du mode de fonctionnement du programmateur horaire de l'éclairage
  431.   for (int i = 0; i < 7; i++)                                                                                                   // Restaure l'itération du programmateur horaire de l'éclairage
  432.   {
  433.     EEPROM.get(60 + i*4, IterationProgHoraireEclairage[i]);
  434.     delay(20);                                                                                                                  // Temporise 20ms
  435.   }
  436.   EEPROM.get(88,HrsDepart1ProgHoraireRepas);                                                                                    // Restaure les heures de départ1 du programmateur horaire des repas
  437.   EEPROM.get(92,MinsDepart1ProgHoraireRepas);                                                                                   // Restaure les minutes de départ1 du programmateur horaire des repas
  438.   EEPROM.get(96,HrsDepart2ProgHoraireRepas);                                                                                    // Restaure les heures de départ2 du programmateur horaire des repas
  439.   EEPROM.get(100,MinsDepart2ProgHoraireRepas);                                                                                  // Restaure les minutes de départ2 du programmateur horaire des repas
  440.   EEPROM.get(104, ModeEco);                                                                                                     // Restaure l'indicateur du mode Eco
  441.   EEPROM.get(108, ModeMute);                                                                                                    // Restaure l'indicateur du mode Mute
  442.   EEPROM.get(112, ModeProgHoraireRepas);                                                                                        // Restaure le mode de fonctionnement du programmateur horaire des repas
  443.   for (int i = 0; i < 7; i++)                                                                                                   // Restaure l'itération du programmateur horaire des repas
  444.   {
  445.     EEPROM.get(116 + i*4, IterationProgHoraireRepas[i]);
  446.   }
  447.  
  448.   tft.begin(9600);                                                                                                              // Démarre la communication avec l'écran TFT
  449.   tft.reset();                                                                                                                  // Initialise l'écran TFT
  450.   g_identifier = tft.readID();                                                                                                  // Lecture de l'identifiant de l'écran TFT
  451.   tft.begin(g_identifier);                                                                                                      // Démarre la librairie de l'écran TFT
  452.  
  453.   tft.fillScreen(BLACK);                                                                                                        // Initialise la couleur du fond d'écran
  454.   tft.setRotation(OrientationTFT);                                                                                              // Initialise le sens d'affichage de l'écran TFT
  455.  
  456.   if (! rtc.begin()) {Serial.println("Couldn't find RTC"); while (1);}                                                          // Démarre la librairie du module RTC PCF8523
  457.   //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));                                                                               // Réglage automatique Heure / Date via le port usb
  458.   //rtc.adjust(DateTime(Annee, Mois, Jour, Hrs, Mins, Secs));                                                                     // Réglage Heure / Date manuel (Annee, Mois, Jour, Hrs, Mins, Secs)
  459.  
  460.   bme.begin();                                                                                                                  // Démarre la librairie du module BME280
  461.  
  462.   Buzzer(20, 0, 1);                                                                                                             // Active le buzzer 20ms
  463.  
  464.   delay(1000);                                                                                                                  // Temporise 1 seconde
  465.  
  466.   FonctionLecturePCF8523();                                                                                                     // Appelle la fonction de lecture de l'heure courante et de la date
  467.  
  468.   if (ModeProgHoraireEclairage) // ******************************************************************************************** // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage est activé
  469.   {
  470.     hStartProgHoraireEclairage = HrsDepartProgHoraireEclairage * 100 + MinsDepartProgHoraireEclairage;                          // Convertit les heures et les minutes de départ du programmateur horaire de l'éclairage en un seul nombre
  471.     hStopProgHoraireEclairage = HrsArretProgHoraireEclairage * 100 + MinsArretProgHoraireEclairage;                             // Convertit les heures et les minutes de d'arrêt du programmateur horaire de l'éclairage en un seul nombre
  472.     ProgHoraireEclairageStarted = false;                                                                                        // Désactive l'indicateur de déclenchement du programmateur horaire de l'éclairage
  473.     ProgHoraireEclairageStopped = false;                                                                                        // Désactive l'indicateur de déclenchement du programmateur horaire de l'éclairage
  474.     TestCreneauHoraireProgHoraireEclairage();                                                                                   // Appelle la fonction test du créneau horaire du programmateur horaire de l'éclairage
  475.   }
  476.  
  477.   if (!ModeManuelTemperature || !ModeManuelHumidite) // *********************************************************************** // Si l'indicateur du mode manuel de la température est désactivé ou Si l'indicateur du mode manuel du taux d'humidité est désactivé
  478.   {
  479.     hStartSeuilsModeJour = HrsDepartSeuilsModeJour * 100 + MinsDepartSeuilsModeJour;                                            // Convertit les heures et les minutes de départ seuils mode jour converties en un seul nombre entier
  480.     hStopSeuilsModeJour = HrsDepartSeuilsModeNuit * 100 + MinsDepartSeuilsModeNuit;                                             // Convertit les heures et les minutes de départ seuils mode nuit converties en un seul nombre entier
  481.     ProgSeuilsModeJourStarted = false;                                                                                          // Désactive l'indicateur de déclenchement seuils mode jour
  482.     ProgSeuilsModeNuitStarted = false;                                                                                          // Désactive l'indicateur de déclenchement seuils mode nuit
  483.     TestCreneauHoraireSeuilsModeJourNuit();                                                                                     // Appelle la fonction test du créneau horaire seuils mode jour/nuit
  484.   }
  485.  
  486. //**************************************************************************************************************************************************************************
  487. }
  488.  
  489. void loop()
  490. {
  491. //**************************************************************************************************************************************************************************
  492.   FonctionLecturePCF8523(); // ************************************************************************************************ // Appelle la fonction de lecture de l'heure courante et de la date
  493.   FonctionLecturebme280(); // ************************************************************************************************* // Appelle la fonction de lecture de la température et du taux d'humidité
  494.  
  495. //**************************************************************************************************************************************************************************
  496.   GestionTactile (); // ******************************************************************************************************* // Appelle la fonction de gestion du mode tactile
  497.  
  498. //**************************************************************************************************************************************************************************
  499.   if (PageCourante == 0 && etatReactivationAffichagePages) // ***************************************************************** // Si la Page courante 0 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page principale
  500.   {
  501.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  502.     {
  503.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  504.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  505.      
  506.       tft.drawRoundRect(0, 0, 480, 320, 20, DARKRED);                                                                           // Trace un cadre en rouge foncé au bord de l'écran TFT
  507.       tft.drawRoundRect(1, 1, 478, 318, 20, DARKRED);
  508.      
  509.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  510.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  511.       tft.setCursor(40, 15); LectureMemoireFlash(message1);                                                                      // Positionne et Affiche le titre "GESTION TERRARIUM v1.0"
  512.      
  513.       tft.drawLine(5, 48, 474, 48, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  514.       tft.drawLine(5, 49, 474, 49, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  515.       tft.drawLine(5, 50, 474, 50, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  516.      
  517.       tft.drawLine(5, 145, 474, 145, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  518.       tft.drawLine(5, 145, 474, 145, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  519.      
  520.       tft.setTextColor(YELLOW);                                                                                                 // Définit la couleur du texte
  521.       tft.setTextSize(1);                                                                                                       // Définit la taille du texte
  522.       Serial.print("!ModeJourSeuilTemperature : ");Serial.println(!ModeJourSeuilTemperature);
  523.       Serial.print("LastModeJourSeuilTemperature : ");Serial.println(LastModeJourSeuilTemperature);
  524.       Serial.print("ModeJourSeuilTemperature : ");Serial.println(ModeJourSeuilTemperature);
  525.       if (ModeManuelTemperature) // ------------------------------------------------------------------------------------------- // Si l'indicateur du mode manuel de la température est activé
  526.       {
  527.         tft.setCursor(71, 220); LectureMemoireFlash(message12); tft.print(' '); LectureMemoireFlash(message18);                 // Positionne et Affiche "MODE MANUEL"
  528.       }
  529.       else if (ModeJourSeuilTemperature && LastModeJourSeuilTemperature != ModeJourSeuilTemperature) // ----------------------- // Si l'indicateur du mode jour pour les seuils de la température est activé
  530.       {
  531.         tft.setCursor(38, 220); LectureMemoireFlash(message2);                                                                  // Positionne et Affiche le texte "SEUIL TEMPERATURE JOUR"
  532.         LastModeJourSeuilTemperature = ModeJourSeuilTemperature;                                                                // Mémorise le dernier indicateur du mode jour pour les seuils de la température
  533.       }
  534.       else if (!ModeJourSeuilTemperature && LastModeJourSeuilTemperature != ModeJourSeuilTemperature) // ---------------------- // Si l'indicateur du mode jour pour les seuils de la température est désactivé
  535.       {
  536.         tft.setCursor(38, 220); LectureMemoireFlash(message11);                                                                 // Positionne et Affiche le texte "SEUIL TEMPERATURE NUIT"
  537.         LastModeJourSeuilTemperature = ModeJourSeuilTemperature;                                                                // Mémorise le dernier indicateur du mode jour pour les seuils de la température
  538.       }
  539.      
  540.       if (ModeManuelHumidite) // ---------------------------------------------------------------------------------------------- // Si l'indicateur du mode manuel du taux d'humidité est activé
  541.       {
  542.         tft.setCursor(340, 220); LectureMemoireFlash(message12); tft.print(' '); LectureMemoireFlash(message18);                // Positionne et Affiche "MODE MANUEL"
  543.       }
  544.       else if (ModeJourSeuilHumidite && LastModeJourSeuilHumidite != ModeJourSeuilHumidite) // -------------------------------- // Si l'indicateur du mode jour pour les seuils du taux d'humidité est activé
  545.       {
  546.         tft.setCursor(290, 220); LectureMemoireFlash(message3);                                                                 // Positionne et Affiche le texte "SEUIL TAUX HUMIDITE JOUR"
  547.         LastModeJourSeuilHumidite = ModeJourSeuilHumidite;                                                                      // Mémorise le dernier indicateur du mode jour pour les seuils du taux d'humidité est activé
  548.       }
  549.       else if (!ModeJourSeuilHumidite && LastModeJourSeuilHumidite != ModeJourSeuilHumidite) // ------------------------------- // Si l'indicateur du mode jour pour les seuils du taux d'humidité est désactivé
  550.       {
  551.         tft.setCursor(290, 220); LectureMemoireFlash(message22);                                                                // Positionne et Affiche le texte "SEUIL TAUX HUMIDITE NUIT"
  552.         LastModeJourSeuilHumidite = ModeJourSeuilHumidite;                                                                      // Mémorise le dernier indicateur du mode jour pour les seuils du taux d'humidité est activé
  553.       }
  554.      
  555.      tft.setTextSize(2);                                                                                                       // Définit la taille du texte
  556.       tft.drawLine(5, 277, 474, 277, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  557.       tft.drawLine(5, 278, 474, 278, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  558.      
  559.       tft.setTextColor(BLACK);                                                                                                  // Définit la couleur du texte
  560.       tft.fillRoundRect(400, 10, 68, 21, 12, 0x07E0);                                                                            // Affiche le Bouton "MENU"
  561.       tft.drawRoundRect(398, 8, 72, 25, 12, 0x07E0);
  562.       tft.setCursor(405, 13); LectureMemoireFlash(message7);                                                                     // Positinne et Affiche le texte "MENU
  563.      
  564.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  565.     }
  566.    
  567.     if (LastSecs != Secs) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la minute courante a changé => Affiche l'heure courante
  568.     {
  569.       tft.setTextColor(BLUE, BLACK); tft.setTextSize(4);                                                                        // Définit la couleur et la taille du texte
  570.       tft.setCursor(15, 80);                                                                                                    // Définit la position
  571.       if (Hrs < 10) {tft.print('0');} tft.print(Hrs);                                                                           // Affiche les heures
  572.       tft.print(':');                                                                                                           // Affiche le texte
  573.       if (Mins < 10) {tft.print('0');} tft.print(Mins);
  574.        tft.print(':');
  575.       if (Secs < 10) {tft.print('0');} tft.print(Secs);
  576.       LastSecs = Secs;                                                                                                            // Mémorise la dernière minute courante
  577.     }
  578.    
  579.     if (LastJour != Jour) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le jour du mois a changé => Affiche la date courante
  580.     {
  581.       tft.setTextColor(BLUE, BLACK); tft.setTextSize(4);                                                                        // Définit la couleur et la taille du texte
  582.      tft.setCursor(230, 80);                                                                                                   // Définit la position
  583.       if (Jour < 10) {tft.print('0');} tft.print(Jour);                                                                         // Affiche le jour du mois
  584.       tft.print('/');                                                                                                           // Affiche le texte
  585.       if (Mois < 10) {tft.print('0');} tft.print(Mois);                                                                         // Affiche le mois
  586.       tft.print('/');                                                                                                           // Affiche le texte
  587.       tft.print(Annee);                                                                                                         // Affiche l'année
  588.      
  589.       LastJour = Jour;                                                                                                          // Mémorise le dernier jour du mois
  590.     }
  591.    
  592.     static int CompteurRelevesTemperature = 0;                                                                                  // Déclare et Initialise les variables pour le calcul de la moyenne de la température
  593.     static float SommeRelevesTemperature = 0.0;
  594.    
  595.     CompteurRelevesTemperature++;                                                                                               // Incrémente le compteur des relevés de température
  596.     SommeRelevesTemperature = SommeRelevesTemperature + TemperatureCourante;                                                    // Calcule la somme des 50 relevés
  597.    
  598.     if (CompteurRelevesTemperature >= 200) // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si 200 relevés ont été effectués
  599.     {
  600.       TemperatureCourante = SommeRelevesTemperature / 200.0;                                                                    // Calcule la moyenne des 200 relevés
  601.       //Serial.println(TemperatureCourante, 1); // Débug
  602.       CompteurRelevesTemperature = 0; SommeRelevesTemperature = 0.0;                                                            // Réinitialisation des variables de calcul de la moyenne de la température
  603.      
  604.       if (LastTemperatureCourante != TemperatureCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la température courante a changé
  605.       {
  606.              if (TemperatureCourante < 0)  {TemperatureCourante = 0.0;} // ---------------------------------------------------- // Borne la température courante entre 0 et 80 degrés
  607.         else if (TemperatureCourante > 80) {TemperatureCourante = 80.0;}
  608.        
  609.         FonctionAffichageTemperatureCourante();                                                                                 // Appelle la fonction d'affichage de la température courante
  610.        
  611.         LastTemperatureCourante = TemperatureCourante;                                                                          // Mémorise la dernière valeur de la température courante
  612.       }
  613.     }
  614.     else if (LastTemperatureCourante == -100) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si LastTemperatureCourante est égale à -100
  615.     {
  616.            if (TemperatureCourante < 0)  {TemperatureCourante = 0.0;} // ------------------------------------------------------ // Borne la température courante entre 0 et 80 degrés
  617.       else if (TemperatureCourante > 80) {TemperatureCourante = 80.0;}
  618.      
  619.       FonctionAffichageTemperatureCourante();                                                                                   // Appelle la fonction d'affichage de la température courante
  620.      
  621.       LastTemperatureCourante = TemperatureCourante;                                                                            // Mémorise la dernière valeur de la température courante
  622.     }
  623.    
  624.     static int CompteurRelevesHumidite = 0;                                                                                     // Déclare et Initialise les variables pour le calcul de la moyenne du taux d'humidité
  625.     static float SommeRelevesHumidite = 0.0;
  626.    
  627.     CompteurRelevesHumidite++;                                                                                                  // Incrémente le compteur des relevés du taux d'humidité
  628.     SommeRelevesHumidite = SommeRelevesHumidite + TauxHumiditeCourant;                                                          // Calcule la somme des 50 relevés
  629.    
  630.     if (CompteurRelevesHumidite >= 200) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si 200 relevés ont été effectués
  631.     {
  632.       TauxHumiditeCourant = SommeRelevesHumidite / 200.0;                                                                       // Calcule la moyenne des 200 relevés
  633.       //Serial.println(TauxHumiditeCourant, 1); // Débug
  634.       CompteurRelevesHumidite = 0; SommeRelevesHumidite = 0.0;                                                                  // Réinitialisation des variables de calcul de la moyenne du taux d'humidité
  635.      
  636.       if (LastTauxHumiditeCourant != TauxHumiditeCourant) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le taux d'humidité courant a changé
  637.       {
  638.         FonctionAffichageTauxHumiditeCourant();                                                                                 // Appelle la fonction d'affichage du taux d'humidité courant
  639.        
  640.         LastTauxHumiditeCourant = TauxHumiditeCourant;                                                                          // Mémorise la dernière valeur du taux d'humidité
  641.       }
  642.     }
  643.     else if (LastTauxHumiditeCourant == -1) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si LastTauxHumiditeCourant est égale à -1
  644.     {
  645.       FonctionAffichageTauxHumiditeCourant();                                                                                   // Appelle la fonction d'affichage du taux d'humidité courant
  646.      
  647.       LastTauxHumiditeCourant = TauxHumiditeCourant;                                                                            // Mémorise la dernière valeur du taux d'humidité
  648.     }
  649.    
  650.     if (LastSeuilTemperatureJour != SeuilTemperatureJour && ModeJourSeuilTemperature) // ++++++++++++++++++++++++++++++++++++++ // Si le seuil de jour de la température a changé
  651.     {
  652.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur
  653.       if (ModeManuelTemperature) // ------------------------------------------------------------------------------------------- // Si l'indicateur du mode manuel de la température est activé
  654.       {
  655.         tft.setTextColor(VERYDARKGRAY);                                                                                         // Définit la couleur
  656.       }
  657.       tft.setTextSize(2);                                                                                                       // Taille du texte
  658.    tft.fillRoundRect(58, 240, 90, 25, 12, 0x3B0A);                                                                           // Affiche du seuil de la température
  659.       tft.drawRoundRect(56, 238, 94, 29, 12, 0x3B0A);
  660.       tft.setCursor(67, 245); tft.print(SeuilTemperatureJour, 1);                                                              // Affiche le texte
  661.       tft.print((char)247);                                                                                                     // Affiche le symbole degré
  662.       tft.print('C');                                                                                                           // Affiche le caractère "C"
  663.      
  664.       LastSeuilTemperatureJour = SeuilTemperatureJour;                                                                          // Mémorise le dernier seuil de jour de la température
  665.     }
  666.    
  667.     if (LastSeuilTemperatureNuit != SeuilTemperatureNuit && !ModeJourSeuilTemperature) // +++++++++++++++++++++++++++++++++++++ // Si le seuil de nuit de la température a changé
  668.     {
  669.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur
  670.       if (ModeManuelTemperature) // ------------------------------------------------------------------------------------------- // Si l'indicateur du mode manuel de la température est activé
  671.       {
  672.         tft.setTextColor(VERYDARKGRAY);                                                                                         // Définit la couleur
  673.       }
  674.       tft.setTextSize(2);                                                                                                       // Taille du texte
  675.    tft.fillRoundRect(58, 240, 90, 25, 12, 0x3B0A);                                                                           // Affiche du seuil de la température
  676.       tft.drawRoundRect(56, 238, 94, 29, 12, 0x3B0A);
  677.       tft.setCursor(67, 245); tft.print(SeuilTemperatureJour, 1);                                                                // Affiche le texte
  678.       tft.print((char)247);                                                                                                     // Affiche le symbole degré
  679.       tft.print('C');                                                                                                           // Affiche le caractère "C"
  680.      
  681.       LastSeuilTemperatureNuit = SeuilTemperatureNuit;                                                                          // Mémorise le dernier seuil de nuit de la température
  682.     }
  683.    
  684.     if (LastSeuilHumiditeJour != SeuilHumiditeJour && ModeJourSeuilHumidite) // +++++++++++++++++++++++++++++++++++++++++++++++ // Si le seuil de jour du taux d'humidité a changé
  685.     {
  686.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur
  687.       if (ModeManuelHumidite) // ---------------------------------------------------------------------------------------------- // Si l'indicateur du mode manuel de la température est activé
  688.       {
  689.         tft.setTextColor(VERYDARKGRAY);                                                                                         // Définit la couleur
  690.       }
  691.       tft.fillRoundRect(320, 240, 90, 25, 12, 0x3B0A);                                                                          // Affiche du seuil du taux d'humidité
  692.       tft.drawRoundRect(318, 238, 94, 29, 12, 0x3B0A);
  693.       tft.setCursor(335, 245); tft.print(SeuilHumiditeJour, 1);                                                                // Affiche le texte
  694.       tft.print('%');                                                                                                           // Affiche le caractère "%"
  695.      
  696.       LastSeuilHumiditeJour = SeuilHumiditeJour;                                                                                // Mémorise le dernier seuil de jour du taux d'humidité
  697.     }
  698.    
  699.     if (LastSeuilHumiditeNuit != SeuilHumiditeNuit && !ModeJourSeuilHumidite) // ++++++++++++++++++++++++++++++++++++++++++++++ // Si le seuil de nuit du taux d'humidité a changé
  700.     {
  701.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur
  702.       if (ModeManuelHumidite) // ---------------------------------------------------------------------------------------------- // Si l'indicateur du mode manuel de la température est activé
  703.       {
  704.         tft.setTextColor(VERYDARKGRAY);                                                                                         // Définit la couleur
  705.       }
  706.       tft.fillRoundRect(320, 240, 90, 25, 12, 0x3B0A);                                                                          // Affiche du seuil du taux d'humidité
  707.       tft.drawRoundRect(318, 238, 94, 29, 12, 0x3B0A);
  708.       tft.setCursor(335, 245); tft.print(SeuilHumiditeNuit, 1);                                                                  // Affiche le texte
  709.       tft.print('%');                                                                                                           // Affiche le caractère "%"
  710.      
  711.       LastSeuilHumiditeNuit = SeuilHumiditeNuit;                                                                                // Mémorise le dernier seuil de nuit du taux d'humidité
  712.     }
  713.    
  714.     if (LastEtatVentilateur != EtatVentilateur) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur d'état du fonctionnement du ventilateur a changé
  715.     {
  716.       if (EtatVentilateur) {coulBoutonVentilateur = KHAKIGREEN;} else {coulBoutonVentilateur = RED;}                            // Sélectionne la couleur du bouton "VENTILATEUR"
  717.       tft.setTextColor(WHITE); tft.setTextSize(2);                                                                              // Définit la couleur et la taille du texte
  718.    tft.fillRoundRect(10, 285, 142, 25, 12, coulBoutonVentilateur);                                                           // Affiche le Bouton "VENTILATEUR"
  719.       tft.drawRoundRect(8, 283, 146, 29, 12, coulBoutonVentilateur);
  720.       tft.setCursor(16, 289); LectureMemoireFlash(message4);                                                                    // Affiche le texte "VENTILATEUR"
  721.      
  722.       LastEtatVentilateur = EtatVentilateur;                                                                                    // Mémorise l'indicateur du dernier état du fonctionnement du ventilateur
  723.     }
  724.    
  725.     if (LastEtatBrumisateur != EtatBrumisateur) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur d'état du fonctionnement du brumisateur a changé
  726.     {
  727.       if (EtatBrumisateur) {coulBoutonBrumisateur = KHAKIGREEN;} else {coulBoutonBrumisateur = RED;}                            // Sélectionne la couleur du bouton "BRUMISATEUR"
  728.       tft.setTextColor(WHITE); tft.setTextSize(2);                                                                              // Définit la couleur et la taille du texte
  729.          tft.fillRoundRect(182, 285, 142, 25, 12, coulBoutonBrumisateur);                                                          // Affiche le Bouton "BRUMISATEUR"
  730.       tft.drawRoundRect(180, 283, 146, 29, 12, coulBoutonBrumisateur);
  731.       tft.setCursor(186, 289); LectureMemoireFlash(message5);                                                                  // Affiche le texte "BRUMISATEUR"
  732.      
  733.       LastEtatBrumisateur = EtatBrumisateur;                                                                                    // Mémorise l'indicateur du dernier état du fonctionnement du brumisateur
  734.     }
  735.    
  736.     if (LastEtatEclairage != EtatEclairage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur d'état du fonctionnement de l'éclairage a changé
  737.     {
  738.       if (EtatEclairage) {coulBoutonEclairage = KHAKIGREEN;} else {coulBoutonEclairage = RED;}                                  // Sélectionne la couleur du bouton "NEONS"
  739.       tft.setTextColor(WHITE); tft.setTextSize(2);                                                                              // Définit la couleur et la taille du texte
  740.    tft.fillRoundRect(400, 285, 68, 25, 12, coulBoutonEclairage);                                                             // Affiche le Bouton "NEONS"
  741.       tft.drawRoundRect(398, 283, 72, 29, 12, coulBoutonEclairage);
  742.       tft.setCursor(405, 289); LectureMemoireFlash(message6);                                                                     // Affiche le texte "NEONS
  743.      
  744.       LastEtatEclairage = EtatEclairage;                                                                                        // Mémorise l'indicateur du dernier état du fonctionnement de l'éclairage
  745.     }
  746.   }
  747. //**************************************************************************************************************************************************************************
  748.   else if (PageCourante == 100 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 100 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage du seuil de jour de la température
  749.   {
  750.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  751.     {
  752.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  753.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  754.      
  755.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  756.      
  757.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  758.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  759.       tft.setCursor(60, 8); LectureMemoireFlash(message8);                                                                       // Positionne et Affiche le titre "REGLAGE SEUIL TEMPERATURE JOUR"
  760.      
  761.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  762.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  763.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  764.      
  765.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  766.       tft.setCursor(120, 42); LectureMemoireFlash(message10);                                                                    // Positionne et Affiche le texte "TEMPERATURE COURANTE"
  767.       tft.setCursor(120, 110); LectureMemoireFlash(message2);                                                                    // Positionne et Affiche le texte "SEUIL TEMPERATURE JOUR"
  768.      
  769.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  770.       tft.drawRect(73, 160, 25, 25, GREEN); tft.drawRect(420, 160, 25, 25, GREEN);                                              // Dessine les 2 boutons + et - et les cadres
  771.       tft.setCursor(81, 165); tft.print('-'); tft.setCursor(426, 165); tft.print('+');                                          // Positionne et Affiche le texte
  772.      
  773.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  774.       tft.setCursor(210, 275); LectureMemoireFlash(message12);                                                                  // Affiche le texte "MODE"
  775.       tft.setCursor(200, 290); LectureMemoireFlash(message18);                                                                  // Affiche le texte "MANUEL"
  776.      
  777.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  778.       tft.setTextSize(3);                                                                                                       // Définit la taile
  779.            if (TemperatureCourante >= 10) {tft.setCursor(190, 70); tft.print(TemperatureCourante, 1);}                          // Positionne et Affiche la température courante
  780.       else if (TemperatureCourante >= 0 && TemperatureCourante < 10){tft.setCursor(190, 70); tft.print(' '); tft.print(TemperatureCourante, 1);}
  781.       tft.setTextSize(2); tft.print((char)247);                                                                                 // Affiche le symbole degré
  782.       tft.setTextSize(3);                                                                                                       // Définit la taile
  783.       tft.print('C');                                                                                                           // Affiche le caractère "C"
  784.      
  785.       if (LastPageCourante != 200) // ----------------------------------------------------------------------------------------- // Si la dernière Page courante est différente de 200
  786.       {
  787.         SeuilTemperatureJourReglage = SeuilTemperatureJour;                                                                     // Transfère le seuil de jour de la température dans le seuil de jour de réglage de la température
  788.         SeuilTemperatureNuitReglage = SeuilTemperatureNuit;                                                                     // Transfère le seuil de nuit de la température dans le seuil de nuit de réglage de la température
  789.         ModeManuelTemperatureReglage = ModeManuelTemperature;                                                                   // Transfère l'indicateur du mode manuel de la température dans l'indicateur de réglage du mode manuel de la température
  790.       }
  791.      
  792.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  793.     }
  794.    
  795.     if (LastSeuilTemperatureJourReglage != SeuilTemperatureJourReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le seuil de jour de réglage de la température a changé
  796.     {
  797.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  798.       tft.setTextSize(6);                                                                                                       // Définit la taile
  799.            if (SeuilTemperatureJourReglage >= 10) {tft.setCursor(160, 180); tft.print(SeuilTemperatureJourReglage, 1);}         // Positionne et Affiche le seuil de jour de réglage de la température
  800.       else if (SeuilTemperatureJourReglage >= 0 && SeuilTemperatureJourReglage < 10){tft.setCursor(160, 180); tft.print(' '); tft.print(SeuilTemperatureJourReglage, 1);}
  801.       tft.setTextSize(2); tft.print((char)247);                                                                                 // Affiche le symbole degré
  802.       tft.setTextSize(6);                                                                                                       // Définit la taile
  803.       tft.print('C');                                                                                                           // Affiche le caractère "C"
  804.      
  805.       LastSeuilTemperatureJourReglage = SeuilTemperatureJourReglage;                                                            // Mémorise le dernier seuil de jour de réglage de la température a changé
  806.     }
  807.    
  808.     if (LastModeManuelTemperatureReglage != ModeManuelTemperatureReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur de réglage du mode manuel de la température a changé
  809.     {
  810.  tft.setTextColor(RED);                                                                                                    // Définit la couleur
  811.       tft.setTextSize(3);                                                                                                       // Définit la taille
  812.       tft.setCursor(80, 280); LectureMemoireFlash(message36); tft.setCursor(365, 280); LectureMemoireFlash(message37);          // Positionne et Affiche "ON" et "OFF"
  813.       if (ModeManuelTemperatureReglage) // ------------------------------------------------------------------------------------ // Si l'indicateur de réglage du mode manuel de la température est activé
  814.       {
  815.     tft.drawRect(71, 270, 51, 39, GREEN);                                                                                   // Affiche un cadre autour de "ON"
  816.         tft.drawRect(355, 270, 69, 39, BLACK);                                                                                   // Efface le cadre autour de "OFF"
  817.       }
  818.       else if (!ModeManuelTemperatureReglage) // ------------------------------------------------------------------------------ // Si l'indicateur de réglage du mode manuel de la température est désactivé
  819.       {
  820.      tft.drawRect(355, 270, 69, 39, GREEN);                                                                                  // Affiche un cadre autour de "OFF"
  821.         tft.drawRect(71, 270, 51, 39, BLACK);                                                                                   // Efface le cadre autour de "ON"
  822.       }
  823.      
  824.       LastModeManuelTemperatureReglage = ModeManuelTemperatureReglage;                                                          // Mémorise le dernier indicateur de réglage du mode manuel de la température
  825.     }
  826.   }
  827. //**************************************************************************************************************************************************************************
  828.   else if (PageCourante == 200 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 200 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage du seuil de nuit de la température
  829.   {
  830.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  831.     {
  832.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  833.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  834.      
  835.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  836.      
  837.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  838.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  839.       tft.setCursor(60, 8); LectureMemoireFlash(message14);                                                                      // Positionne et Affiche le titre "REGLAGE SEUIL TEMPERATURE NUIT"
  840.      
  841.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  842.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  843.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  844.      
  845.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  846.       tft.setCursor(120, 42); LectureMemoireFlash(message10);                                                                    // Positionne et Affiche le texte "TEMPERATURE COURANTE"
  847.       tft.setCursor(120, 110); LectureMemoireFlash(message11);                                                                   // Positionne et Affiche le texte "SEUIL TEMPERATURE NUIT"
  848.      
  849.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  850.       tft.drawRect(73, 160, 25, 25, GREEN); tft.drawRect(420, 160, 25, 25, GREEN);                                              // Dessine les 2 boutons + et - et les cadres
  851.       tft.setCursor(81, 165); tft.print('-'); tft.setCursor(426, 165); tft.print('+');                                          // Positionne et Affiche le texte
  852.      
  853.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  854.       tft.setCursor(210, 275); LectureMemoireFlash(message12);                                                                  // Affiche le texte "MODE"
  855.       tft.setCursor(200, 290); LectureMemoireFlash(message18);                                                                  // Affiche le texte "MANUEL"
  856.      
  857.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  858.       tft.setTextSize(3);                                                                                                       // Définit la taile
  859.            if (TemperatureCourante >= 10) {tft.setCursor(190, 70); tft.print(TemperatureCourante, 1);}                          // Positionne et Affiche la température courante
  860.       else if (TemperatureCourante >= 0 && TemperatureCourante < 10){tft.setCursor(190, 70); tft.print(' '); tft.print(TemperatureCourante, 1);}
  861.       tft.setTextSize(2); tft.print((char)247);                                                                                 // Affiche le symbole degré
  862.       tft.setTextSize(3);                                                                                                       // Définit la taile
  863.       tft.print('C');                                                                                                           // Affiche le caractère "C"
  864.      
  865.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  866.     }
  867.    
  868.     if (LastSeuilTemperatureNuitReglage != SeuilTemperatureNuitReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le seuil de nuit de réglage de la température a changé
  869.     {
  870.      tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  871.       tft.setTextSize(6);                                                                                                       // Définit la taile
  872.            if (SeuilTemperatureNuitReglage >= 10) {tft.setCursor(160, 180); tft.print(SeuilTemperatureNuitReglage, 1);}         // Positionne et Affiche le seuil de nuit de réglage de la température
  873.       else if (SeuilTemperatureNuitReglage >= 0 && SeuilTemperatureNuitReglage < 10){tft.setCursor(160, 180); tft.print(' '); tft.print(SeuilTemperatureNuitReglage, 1);}
  874.       tft.setTextSize(2); tft.print((char)247);                                                                                 // Affiche le symbole degré
  875.       tft.setTextSize(6);                                                                                                       // Définit la taile
  876.       tft.print('C');                                                                                                             // Affiche le caractère "C"
  877.      
  878.       LastSeuilTemperatureNuitReglage = SeuilTemperatureNuitReglage;                                                            // Mémorise le dernier seuil de nuit de réglage de la température a changé
  879.     }
  880.    
  881.     if (LastModeManuelTemperatureReglage != ModeManuelTemperatureReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur de réglage du mode manuel de la température a changé
  882.     {
  883.         tft.setTextColor(RED);                                                                                                    // Définit la couleur
  884.       tft.setTextSize(3);                                                                                                       // Définit la taille
  885.       tft.setCursor(80, 280); LectureMemoireFlash(message36); tft.setCursor(365, 280); LectureMemoireFlash(message37);          // Positionne et Affiche "ON" et "OFF"
  886.       if (ModeManuelTemperatureReglage) // ------------------------------------------------------------------------------------ // Si l'indicateur de réglage du mode manuel de la température est activé
  887.       {
  888.         tft.drawRect(71, 270, 51, 39, GREEN);                                                                                   // Affiche un cadre autour de "ON"
  889.         tft.drawRect(355, 270, 69, 39, BLACK);                                                                                  // Efface le cadre autour de "OFF"
  890.       }
  891.       else if (!ModeManuelTemperatureReglage) // ------------------------------------------------------------------------------ // Si l'indicateur de réglage du mode manuel de la température est désactivé
  892.       {
  893.         tft.drawRect(355, 270, 69, 39, GREEN);                                                                                  // Affiche un cadre autour de "OFF"
  894.         tft.drawRect(71, 270, 51, 39, BLACK);                                                                                    // Efface le cadre autour de "ON"
  895.       }
  896.      
  897.       LastModeManuelTemperatureReglage = ModeManuelTemperatureReglage;                                                          // Mémorise le dernier indicateur de réglage du mode manuel de la température
  898.     }
  899.   }
  900. //**************************************************************************************************************************************************************************
  901.   else if (PageCourante == 101 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 101 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage du seuil de jour du taux d'humidité
  902.   {
  903.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  904.     {
  905.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  906.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  907.      
  908.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  909.      
  910.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  911.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  912.      tft.setCursor(60, 8); LectureMemoireFlash(message9);                                                                      // Positionne et Affiche le titre "REGLAGE SEUIL HUMIDITE JOUR"
  913.      
  914.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  915.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  916.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  917.      
  918.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  919.       tft.setCursor(120, 42); LectureMemoireFlash(message17);                                                                    // Positionne et Affiche le texte "TAUX HUMIDITE COURANT"
  920.       tft.setCursor(120, 110); LectureMemoireFlash(message13);                                                                   // Positionne et Affiche le texte "SEUIL HUMIDITE JOUR"
  921.      
  922.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  923.       tft.drawRect(73, 160, 25, 25, GREEN); tft.drawRect(420, 160, 25, 25, GREEN);                                              // Dessine les 2 boutons + et - et les cadres
  924.       tft.setCursor(81, 165); tft.print('-'); tft.setCursor(426, 165); tft.print('+');                                          // Positionne et Affiche le texte
  925.      
  926.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  927.       tft.setCursor(210, 275); LectureMemoireFlash(message12);                                                                  // Affiche le texte "MODE"
  928.       tft.setCursor(200, 290); LectureMemoireFlash(message18);                                                                  // Affiche le texte "MANUEL"
  929.      
  930.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  931.       tft.setTextSize(3);                                                                                                       // Définit la taile
  932.            if (TauxHumiditeCourant >= 10) {tft.setCursor(190, 70); tft.print(TauxHumiditeCourant, 1);}                          // Positionne et Affiche le taux d'humidité
  933.       else if (TauxHumiditeCourant >= 0 && TauxHumiditeCourant < 10){tft.setCursor(190, 70); tft.print(' '); tft.print(TauxHumiditeCourant, 1);}
  934.       tft.setTextSize(3);                                                                                                        // Définit la taile
  935.       tft.print('%');                                                                                                           // Affiche le caractère "%"
  936.      
  937.       if (LastPageCourante != 201) // ----------------------------------------------------------------------------------------- // Si la dernière Page courante est différente de 200
  938.       {
  939.         SeuilHumiditeJourReglage = SeuilHumiditeJour;                                                                           // Transfère le seuil de jour du taux d'humidité dans le seuil de jour de réglage du taux d'humidité
  940.         SeuilHumiditeNuitReglage = SeuilHumiditeNuit;                                                                           // Transfère le seuil de nuit du taux d'humidité dans le seuil de nuit de réglage du taux d'humidité
  941.         ModeManuelHumiditeReglage = ModeManuelHumidite;                                                                         // Transfère l'indicateur du mode manuel du taux d'humidité dans l'indicateur de réglage du mode manuel du taux d'humidité
  942.       }
  943.      
  944.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  945.     }
  946.    
  947.     if (LastSeuilHumiditeJourReglage != SeuilHumiditeJourReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le seuil de jour de réglage du taux d'humidité a changé
  948.     {
  949.      tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  950.       tft.setTextSize(6);                                                                                                       // Définit la taile
  951.            if (SeuilHumiditeJourReglage >= 10) {tft.setCursor(160, 180); tft.print(SeuilHumiditeJourReglage, 1);}               // Positionne et Affiche le seuil de jour de réglage du taux d'humidité
  952.       else if (SeuilHumiditeJourReglage >= 0 && SeuilHumiditeJourReglage < 10){tft.setCursor(160, 180); tft.print(' '); tft.print(SeuilHumiditeJourReglage, 1);}
  953.       tft.setTextSize(6);                                                                                                       // Définit la taile
  954.       tft.print('%');                                                                                                             // Affiche le caractère "%"
  955.      
  956.       LastSeuilHumiditeJourReglage = SeuilHumiditeJourReglage;                                                                  // Mémorise le dernier seuil de jour de réglage du taux d'humidité a changé
  957.     }
  958.    
  959.     if (LastModeManuelHumiditeReglage != ModeManuelHumiditeReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur de réglage du mode manuel du taux d'humidité a changé
  960.     {
  961.       tft.setTextColor(RED);                                                                                                    // Définit la couleur
  962.       tft.setTextSize(3);                                                                                                       // Définit la taille
  963.       tft.setCursor(80, 280); LectureMemoireFlash(message36); tft.setCursor(365, 280); LectureMemoireFlash(message37);          // Positionne et Affiche "ON" et "OFF"
  964.       if (ModeManuelHumiditeReglage) // --------------------------------------------------------------------------------------- // Si l'indicateur de réglage du mode manuel du taux d'humidité est activé
  965.       {
  966.         tft.drawRect(71, 270, 51, 39, GREEN);                                                                                   // Affiche un cadre autour de "ON"
  967.         tft.drawRect(355, 270, 69, 39, BLACK);                                                                                  // Efface le cadre autour de "OFF"
  968.       }
  969.       else if (!ModeManuelHumiditeReglage) // --------------------------------------------------------------------------------- // Si l'indicateur de réglage du mode manuel du taux d'humidité est désactivé
  970.       {
  971.         tft.drawRect(355, 270, 69, 39, GREEN);                                                                                  // Affiche un cadre autour de "OFF"
  972.         tft.drawRect(71, 270, 51, 39, BLACK);                                                                                   // Efface le cadre autour de "ON"
  973.       }
  974.      
  975.       LastModeManuelHumiditeReglage = ModeManuelHumiditeReglage;                                                                // Mémorise le dernier indicateur de réglage du mode manuel du taux d'humidité
  976.     }
  977.   }
  978. //**************************************************************************************************************************************************************************
  979.   else if (PageCourante == 201 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 201 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage du seuil de nuit du taux d'humidité
  980.   {
  981.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  982.     {
  983.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  984.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  985.      
  986.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  987.      
  988.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  989.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  990.       tft.setCursor(60, 8); LectureMemoireFlash(message15);                                                                     // Positionne et Affiche le titre "REGLAGE SEUIL HUMIDITE NUIT"
  991.      
  992.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  993.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  994.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  995.      
  996.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  997.       tft.setCursor(120, 42); LectureMemoireFlash(message17);                                                                    // Positionne et Affiche le texte "TAUX HUMIDITE COURANT"
  998.       tft.setCursor(120, 110); LectureMemoireFlash(message16);                                                                   // Positionne et Affiche le texte "SEUIL HUMIDITE NUIT"
  999.      
  1000.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1001.       tft.drawRect(73, 160, 25, 25, GREEN); tft.drawRect(420, 160, 25, 25, GREEN);                                              // Dessine les 2 boutons + et - et les cadres
  1002.       tft.setCursor(81, 165); tft.print('-'); tft.setCursor(426, 165); tft.print('+');                                          // Positionne et Affiche le texte
  1003.      
  1004.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  1005.       tft.setCursor(210, 275); LectureMemoireFlash(message12);                                                                  // Affiche le texte "MODE"
  1006.       tft.setCursor(200, 290); LectureMemoireFlash(message18);                                                                  // Affiche le texte "MANUEL"
  1007.      
  1008.    tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1009.       tft.setTextSize(3);                                                                                                       // Définit la taile
  1010.            if (TauxHumiditeCourant >= 10) {tft.setCursor(190, 70); tft.print(TauxHumiditeCourant, 1);}                          // Positionne et Affiche le taux d'humidité
  1011.       else if (TauxHumiditeCourant >= 0 && TauxHumiditeCourant < 10){tft.setCursor(190, 70); tft.print(' '); tft.print(TauxHumiditeCourant, 1);}
  1012.       tft.setTextSize(3);                                                                                                        // Définit la taile
  1013.       tft.print("%");                                                                                                             // Affiche le caractère "%"
  1014.      
  1015.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1016.     }
  1017.    
  1018.     if (LastSeuilHumiditeNuitReglage != SeuilHumiditeNuitReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le seuil de nuit de réglage du taux d'humidité a changé
  1019.     {
  1020.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1021.       tft.setTextSize(6);                                                                                                       // Définit la taile
  1022.            if (SeuilHumiditeNuitReglage >= 10) {tft.setCursor(160, 180); tft.print(SeuilHumiditeNuitReglage, 1);}               // Positionne et Affiche le seuil de nuit de réglage du taux d'humidité
  1023.       else if (SeuilHumiditeNuitReglage >= 0 && SeuilHumiditeNuitReglage < 10){tft.setCursor(160, 180); tft.print(' '); tft.print(SeuilHumiditeNuitReglage, 1);}
  1024.       tft.setTextSize(6);                                                                                                          // Affiche le caractère "%"
  1025.       tft.print("%");
  1026.      
  1027.       LastSeuilHumiditeNuitReglage = SeuilHumiditeNuitReglage;                                                                  // Mémorise le dernier seuil de nuit de réglage du taux d'humidité a changé
  1028.     }
  1029.    
  1030.     if (LastModeManuelHumiditeReglage != ModeManuelHumiditeReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur de réglage du mode manuel du taux d'humidité a changé
  1031.     {
  1032.      tft.setTextColor(RED);                                                                                                    // Définit la couleur
  1033.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1034.       tft.setCursor(80, 280); LectureMemoireFlash(message36); tft.setCursor(365, 280); LectureMemoireFlash(message37);          // Positionne et Affiche "ON" et "OFF"
  1035.       if (ModeManuelHumiditeReglage) // --------------------------------------------------------------------------------------- // Si l'indicateur de réglage du mode manuel du taux d'humidité est activé
  1036.       {
  1037.         tft.drawRect(71, 270, 51, 39, GREEN);                                                                                   // Affiche un cadre autour de "ON"
  1038.         tft.drawRect(355, 270, 69, 39, BLACK);                                                                                  // Efface le cadre autour de "OFF"
  1039.       }
  1040.       else if (!ModeManuelHumiditeReglage) // --------------------------------------------------------------------------------- // Si l'indicateur de réglage du mode manuel du taux d'humidité est désactivé
  1041.       {
  1042.         tft.drawRect(355, 270, 69, 39, GREEN);                                                                                  // Affiche un cadre autour de "OFF"
  1043.         tft.drawRect(71, 270, 51, 39, BLACK);                                                                                   // Efface le cadre autour de "ON"
  1044.       }
  1045.      
  1046.       LastModeManuelHumiditeReglage = ModeManuelHumiditeReglage;                                                                // Mémorise le dernier indicateur de réglage du mode manuel du taux d'humidité
  1047.     }
  1048.   }
  1049. //**************************************************************************************************************************************************************************
  1050.   else if (PageCourante == 102 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 102 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage des heures de départ jour et de départ nuit pour activer les seuils en fonction du mode jour/nuit
  1051.   {
  1052.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  1053.     {
  1054.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1055.      tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  1056.      
  1057.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  1058.      
  1059.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  1060.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  1061.       tft.setCursor(60, 8); LectureMemoireFlash(message19);                                                                      // Positionne et Affiche le titre "REGLAGE HEURES SEUILS JOUR/NUIT"
  1062.      
  1063.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1064.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1065.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1066.      
  1067.       tft.drawLine(5, 175, 480, 175, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  1068.       tft.drawLine(5, 176, 480, 176, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  1069.      
  1070.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  1071.       tft.setTextSize(2);                                                                                                       // Définit la taille
  1072.       tft.setCursor(50, 55); LectureMemoireFlash(message20);                                                                    // Positionne et Affiche "DEPART JOUR"
  1073.       tft.setCursor(310, 55); LectureMemoireFlash(message21);                                                                   // Positionne et Affiche "DEPART NUIT"
  1074.      
  1075.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1076.       tft.drawRect(64, 130, 25, 25, GREEN); tft.drawRect(118, 130, 25, 25, GREEN);                                              // Dessine les 4 boutons + et les cadres
  1077.       tft.setTextSize(2); tft.setCursor(72, 136); tft.print('+'); tft.setCursor(126, 136); tft.print('+');
  1078.       tft.drawRect(326, 130, 25, 25, GREEN); tft.drawRect(380, 130, 25, 25, GREEN);
  1079.       tft.setCursor(333, 136); tft.print('+'); tft.setCursor(387, 136); tft.print('+');
  1080.      
  1081.      
  1082.       HrsDepartSeuilsModeJourReglage = HrsDepartSeuilsModeJour;                                                                 // Transfère les heures départ seuils mode jour dans les heures départ de réglage seuils mode jour
  1083.       MinsDepartSeuilsModeJourReglage = MinsDepartSeuilsModeJour;                                                               // Transfère les minutes départ seuils mode jour dans les minutes départ de réglage seuils mode jour
  1084.       HrsDepartSeuilsModeNuitReglage = HrsDepartSeuilsModeNuit;                                                                 // Transfère les heures départ seuils mode nuit dans les heures départ de réglage seuils mode nuit
  1085.       MinsDepartSeuilsModeNuitReglage = MinsDepartSeuilsModeNuit;                                                               // Transfère les minutes départ seuils mode nuit dans les minutes départ de réglage seuils mode nuit
  1086.      
  1087.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1088.     }
  1089.    
  1090.     if (LastHrsDepartSeuilsModeJourReglage != HrsDepartSeuilsModeJourReglage // +++++++++++++++++++++++++++++++++++++++++++++++ // Si les heures ou les minutes de départ de réglage seuils mode jour ont changé
  1091.      || LastMinsDepartSeuilsModeJourReglage != MinsDepartSeuilsModeJourReglage)
  1092.     {
  1093.   tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1094.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1095.       tft.setCursor(60, 87);                                                                                                    // Positionne le texte
  1096.       if (HrsDepartSeuilsModeJourReglage < 10) {tft.print('0');} tft.print(HrsDepartSeuilsModeJourReglage);                     // Affiche le texte
  1097.       tft.print(':');                                                                                                          // Affiche le caractère ":"
  1098.       if (MinsDepartSeuilsModeJourReglage < 10) {tft.print('0');} tft.print(MinsDepartSeuilsModeJourReglage);                   // Affiche le texte
  1099.       LastHrsDepartSeuilsModeJourReglage = HrsDepartSeuilsModeJourReglage;                                                      // Mémorise les dernières heures départ de réglage seuils mode jour
  1100.       LastMinsDepartSeuilsModeJourReglage = MinsDepartSeuilsModeJourReglage;                                                    // Mémorise les dernière minutes départ de réglage seuils mode jour
  1101.     }
  1102.    
  1103.     if (LastHrsDepartSeuilsModeNuitReglage != HrsDepartSeuilsModeNuitReglage // +++++++++++++++++++++++++++++++++++++++++++++++ // Si les heures ou les minutes d'arrêt de réglage seuils mode nuit
  1104.      || LastMinsDepartSeuilsModeNuitReglage != MinsDepartSeuilsModeNuitReglage)
  1105.     {
  1106.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1107.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1108.       tft.setCursor(326, 87);                                                                                                   // Positionne le texte
  1109.       if (HrsDepartSeuilsModeNuitReglage < 10) {tft.print('0');} tft.print(HrsDepartSeuilsModeNuitReglage);                     // Affiche le texte
  1110.       tft.print(':');                                                                                                           // Affiche le caractère ":"
  1111.       if (MinsDepartSeuilsModeNuitReglage < 10) {tft.print('0');} tft.print(MinsDepartSeuilsModeNuitReglage);                   // Affiche le texte
  1112.       LastHrsDepartSeuilsModeNuitReglage = HrsDepartSeuilsModeNuitReglage;                                                      // Mémorise les dernière heures départ de réglage seuils mode nuit
  1113.       LastMinsDepartSeuilsModeNuitReglage = MinsDepartSeuilsModeNuitReglage;                                                    // Mémorise les dernière minutes départ de réglage seuils mode nuit
  1114.     }
  1115.    
  1116.     if (LastMins != Mins) // -------------------------------------------------------------------------------------------------- // Si les minutes courantes ont changé
  1117.     {
  1118.     tft.setTextColor(WHITE, BLACK); tft.setTextSize(6);                                                                       // Définit la couleur et la taille
  1119.       tft.setCursor(155, 205);                                                                                                  // Définit la position
  1120.       if (Hrs < 10) {tft.print('0');} tft.print(Hrs);                                                                           // Affiche les heures courantes
  1121.       tft.fillCircle(230, 230, 4, WHITE); tft.fillCircle(230, 212, 4, WHITE);                                                   // Affiche les deux points ":" de l'heure
  1122.       tft.setCursor(240, 205);                                                                                                  // Définit la position
  1123.       if (Mins < 10) {tft.print('0');} tft.print(Mins);                                                                         // Affiche les minutes courantes
  1124.       LastMins = Mins;                                                                                                // Mémorise les dernières minutes courantes
  1125.     }
  1126.   }
  1127. //**************************************************************************************************************************************************************************
  1128.   else if (PageCourante == 103 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 103 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage du programmateur horaire d'éclairage
  1129.   {
  1130.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  1131.     {
  1132.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  1133.      
  1134.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  1135.      
  1136.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  1137.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  1138.       tft.setCursor(60, 8); LectureMemoireFlash(message23);                                                                      // Positionne et Affiche le titre "REGLAGE PROGRAMMATEUR ECLAIRAGE"
  1139.      
  1140.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1141.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1142.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1143.      
  1144.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  1145.       tft.setCursor(235, 275); LectureMemoireFlash(message12);                                                                  // Affiche le texte "MODE"
  1146.       tft.setCursor(235, 290); LectureMemoireFlash(message26);                                                                  // Affiche le texte "AUTO"
  1147.      
  1148.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1149.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1150.       tft.setCursor(80, 46); LectureMemoireFlash(message24);                                                                    // Positionne et Affiche "DEPART :"
  1151.       tft.setCursor(80, 94); LectureMemoireFlash(message25);                                                                    // Positionne et Affiche "ARRET  :"
  1152.      
  1153.       if (LastPageCourante != 203) // ----------------------------------------------------------------------------------------- // Si la dernière Page courante est différente de 203
  1154.       {
  1155.         HrsDepartProgHoraireEclairageReglage = HrsDepartProgHoraireEclairage;                                                   // Transfère les heures de départ du programmateur horaire de l'éclairage dans les heures de départ de réglage du programmateur horaire de l'éclairage
  1156.         MinsDepartProgHoraireEclairageReglage = MinsDepartProgHoraireEclairage;                                                 // Transfère les minutes de départ du programmateur horaire de l'éclairage dans les minutes de départ de réglage du programmateur horaire de l'éclairage
  1157.         HrsArretProgHoraireEclairageReglage = HrsArretProgHoraireEclairage;                                                     // Transfère les heures d'arrêt du programmateur horaire de l'éclairage dans les heures d'arrêt de réglage du programmateur horaire de l'éclairage
  1158.         MinsArretProgHoraireEclairageReglage = MinsArretProgHoraireEclairage;                                                   // Transfère les minutes d'arrêt du programmateur horaire de l'éclairage dans les minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  1159.         ModeProgHoraireEclairageReglage = ModeProgHoraireEclairage;                                                             // Transfère l'indicateur du mode de fonctionnement du programmateur horaire de l'éclairage dans l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage
  1160.         for (int i = 0; i < 7; i++)                                                                                             // Transfère l'itération du programmateur horaire de l'éclairage dans l'itération de réglage du programmateur horaire de l'éclairage
  1161.         {
  1162.           IterationProgHoraireEclairageReglage[i] = IterationProgHoraireEclairage[i];
  1163.         }
  1164.       }
  1165.      
  1166.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1167.      
  1168.    tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1169.       tft.setTextSize(4);                                                                                                       // Définit la taille
  1170.       tft.setCursor(270, 42);                                                                                                   // Positionne le texte
  1171.       if (HrsDepartProgHoraireEclairageReglage < 10) {tft.print('0');} tft.print(HrsDepartProgHoraireEclairageReglage);         // Affiche le texte
  1172.       tft.setCursor(325, 42); tft.print(':');                                                                                   // Positionne et Affiche le caréctère ":"
  1173.       tft.setCursor(350, 42);                                                                                                   // Positionne le texte
  1174.       if (MinsDepartProgHoraireEclairageReglage < 10) {tft.print('0');} tft.print(MinsDepartProgHoraireEclairageReglage);       // Affiche le texte
  1175.       tft.setCursor(270, 90);                                                                                                   // Positionne le texte
  1176.       if (HrsArretProgHoraireEclairageReglage < 10) {tft.print('0');} tft.print(HrsArretProgHoraireEclairageReglage);           // Affiche le texte
  1177.       tft.setCursor(325, 90); tft.print(':');                                                                                   // Positionne et Affiche le caréctère ":"
  1178.       tft.setCursor(350, 90);                                                                                                   // Positionne le texte
  1179.       if (MinsArretProgHoraireEclairageReglage < 10) {tft.print('0');} tft.print(MinsArretProgHoraireEclairageReglage);         // Positionne et Affiche le texte
  1180.      
  1181.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1182.     }
  1183.    
  1184.     uint16_t couleurBoutonsIteration;                                                                                           // Déclarare la variable couleur des boutons de l'itération
  1185.    
  1186.     tft.setTextSize(2);                                                                                                         // Définit la taille
  1187.     tft.setTextColor(WHITE);                                                                                                    // Définit la couleur
  1188.    
  1189.    if (LastIterationProgHoraireEclairageReglage[0] != IterationProgHoraireEclairageReglage[0]) // ++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire de l'éclairage a changé
  1190.     {
  1191.       if (!IterationProgHoraireEclairageReglage[0]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;} // Sélectionne la couleur
  1192.       tft.fillCircle(100, 190, 16, couleurBoutonsIteration);                                                                     // Dessine le bouton Dimanche "D"
  1193.       tft.drawCircle(100, 190, 20, couleurBoutonsIteration);
  1194.       tft.setCursor(95, 183); tft.print('D');                                                                                   // Positionne et Affiche le texte
  1195.       LastIterationProgHoraireEclairageReglage[0] = IterationProgHoraireEclairageReglage[0];                                    // Mémorise l'itération de réglage du programmateur horaire de l'éclairage
  1196.     }
  1197.     if (LastIterationProgHoraireEclairageReglage[1] != IterationProgHoraireEclairageReglage[1]) // ++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire de l'éclairage a changé
  1198.     {
  1199.       if (!IterationProgHoraireEclairageReglage[1]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;} // Sélectionne la couleur
  1200.       tft.fillCircle(150, 190, 16, couleurBoutonsIteration);                                                                     // Dessine le bouton Lundi "L"
  1201.       tft.drawCircle(150, 190, 20, couleurBoutonsIteration);
  1202.       tft.setCursor(145, 183); tft.print('L');                                                                                   // Positionne et Affiche le texte
  1203.       LastIterationProgHoraireEclairageReglage[1] = IterationProgHoraireEclairageReglage[1];                                    // Mémorise l'itération de réglage du programmateur horaire de l'éclairage
  1204.     }
  1205.     if (LastIterationProgHoraireEclairageReglage[2] != IterationProgHoraireEclairageReglage[2]) // ++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire de l'éclairage a changé
  1206.     {
  1207.       if (!IterationProgHoraireEclairageReglage[2]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;} // Sélectionne la couleur
  1208.       tft.fillCircle(200, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Mardi "M"
  1209.       tft.drawCircle(200, 190, 20, couleurBoutonsIteration);
  1210.       tft.setCursor(195, 183); tft.print('M');                                                                                  // Positionne et Affiche le texte
  1211.       LastIterationProgHoraireEclairageReglage[2] = IterationProgHoraireEclairageReglage[2];                                    // Mémorise l'itération de réglage du programmateur horaire de l'éclairage
  1212.     }
  1213.     if (LastIterationProgHoraireEclairageReglage[3] != IterationProgHoraireEclairageReglage[3]) // ++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire de l'éclairage a changé
  1214.    {
  1215.       if (!IterationProgHoraireEclairageReglage[3]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;} // Sélectionne la couleur
  1216.       tft.fillCircle(250, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Mercredi "M"
  1217.       tft.drawCircle(250, 190, 20, couleurBoutonsIteration);
  1218.       tft.setCursor(245, 183); tft.print('M');                                                                                  // Positionne et Affiche le texte
  1219.       LastIterationProgHoraireEclairageReglage[3] = IterationProgHoraireEclairageReglage[3];                                    // Mémorise l'itération de réglage du programmateur horaire de l'éclairage
  1220.     }
  1221.     if (LastIterationProgHoraireEclairageReglage[4] != IterationProgHoraireEclairageReglage[4]) // ++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire de l'éclairage a changé
  1222.     {
  1223.       if (!IterationProgHoraireEclairageReglage[4]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;} // Sélectionne la couleur
  1224.       tft.fillCircle(300, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Jeudi "J"
  1225.       tft.drawCircle(300, 190, 20, couleurBoutonsIteration);
  1226.       tft.setCursor(295, 183); tft.print('J');                                                                                  // Positionne et Affiche le texte
  1227.       LastIterationProgHoraireEclairageReglage[4] = IterationProgHoraireEclairageReglage[4];                                    // Mémorise l'itération de réglage du programmateur horaire de l'éclairage
  1228.     }
  1229.     if (LastIterationProgHoraireEclairageReglage[5] != IterationProgHoraireEclairageReglage[5]) // ++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire de l'éclairage a changé
  1230.     {
  1231.       if (!IterationProgHoraireEclairageReglage[5]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;} // Sélectionne la couleur
  1232.       tft.fillCircle(350, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Vendredi "V"
  1233.       tft.drawCircle(350, 190, 20, couleurBoutonsIteration);
  1234.       tft.setCursor(345, 183); tft.print('V');                                                                                  // Positionne et Affiche le texte
  1235.       LastIterationProgHoraireEclairageReglage[5] = IterationProgHoraireEclairageReglage[5];                                    // Mémorise l'itération de réglage du programmateur horaire de l'éclairage
  1236.     }
  1237.     if (LastIterationProgHoraireEclairageReglage[6] != IterationProgHoraireEclairageReglage[6]) // ++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire de l'éclairage a changé
  1238.     {
  1239.       if (!IterationProgHoraireEclairageReglage[6]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;} // Sélectionne la couleur
  1240.       tft.fillCircle(400, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Samedi "S"
  1241.       tft.drawCircle(400, 190, 20, couleurBoutonsIteration);
  1242.       tft.setCursor(395, 183); tft.print('S');                                                                                  // Positionne et Affiche le texte
  1243.       LastIterationProgHoraireEclairageReglage[6] = IterationProgHoraireEclairageReglage[6];                                    // Mémorise l'itération de réglage du programmateur horaire de l'éclairage
  1244.     }
  1245.    
  1246.     if (LastModeProgHoraireEclairageReglage != ModeProgHoraireEclairageReglage) // ++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage a changé
  1247.     {
  1248.   tft.setTextColor(RED);                                                                                                    // Définit la couleur
  1249.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1250.       tft.setCursor(80, 280); LectureMemoireFlash(message36); tft.setCursor(365, 280); LectureMemoireFlash(message37);          // Positionne et Affiche "ON" et "OFF"
  1251.       if (ModeProgHoraireEclairageReglage) // --------------------------------------------------------------------------------- // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage est activé
  1252.       {
  1253.         tft.drawRect(71, 270, 51, 39, GREEN);                                                                                   // Affiche un cadre autour de "ON"
  1254.         tft.drawRect(355, 270, 69, 39, BLACK);                                                                                  // Efface le cadre autour de "OFF"
  1255.       }
  1256.       else if (!ModeProgHoraireEclairageReglage) // --------------------------------------------------------------------------- // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage est désactivé
  1257.       {
  1258.         tft.drawRect(355, 270, 69, 39, GREEN);                                                                                  // Affiche un cadre autour de "OFF"
  1259.         tft.drawRect(71, 270, 51, 39, BLACK);                                                                                   // Efface le cadre autour de "ON"
  1260.       }
  1261.      
  1262.       LastModeProgHoraireEclairageReglage = ModeProgHoraireEclairageReglage;                                                    // Mémorise le dernier indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage
  1263.     }
  1264.   }
  1265. //**************************************************************************************************************************************************************************
  1266.   else if (PageCourante == 203 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 203 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage du programmateur horaire d'éclairage
  1267.   {
  1268.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  1269.     {
  1270.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1271.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  1272.      
  1273.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  1274.      
  1275.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  1276.      tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  1277.       tft.setCursor(60, 8); LectureMemoireFlash(message23);                                                                      // Positionne et Affiche le titre "REGLAGE PROGRAMMATEUR ECLAIRAGE"
  1278.      
  1279.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1280.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1281.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1282.      
  1283.       tft.drawLine(5, 175, 480, 175, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  1284.       tft.drawLine(5, 176, 480, 176, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  1285.      
  1286.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  1287.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1288.       tft.setCursor(51, 52); LectureMemoireFlash(message29);                                                                    // Positionne et Affiche le texte "DEPART"
  1289.       tft.setCursor(310, 52); LectureMemoireFlash(message30);                                                                   // Positionne et Affiche le texte "ARRET"
  1290.      
  1291.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1292.       tft.drawRect(64, 130, 25, 25, GREEN); tft.drawRect(118, 130, 25, 25, GREEN);                                              // Dessine les 4 boutons + et les cadres
  1293.       tft.setTextSize(2); tft.setCursor(72, 136); tft.print('+'); tft.setCursor(126, 136); tft.print('+');
  1294.       tft.drawRect(326, 130, 25, 25, GREEN); tft.drawRect(380, 130, 25, 25, GREEN);
  1295.       tft.setCursor(333, 136); tft.print('+'); tft.setCursor(387, 136); tft.print('+');
  1296.      
  1297.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1298.     }
  1299.    
  1300.     if (LastHrsDepartProgHoraireEclairageReglage != HrsDepartProgHoraireEclairageReglage // +++++++++++++++++++++++++++++++++++ // Si les heures ou les minutes de départ de réglage du programmateur horaire de l'éclairage
  1301.      || LastMinsDepartProgHoraireEclairageReglage != MinsDepartProgHoraireEclairageReglage)
  1302.     {
  1303.    tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1304.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1305.       tft.setCursor(60, 87);                                                                                                    // Positionne le texte
  1306.       if (HrsDepartProgHoraireEclairageReglage < 10) {tft.print('0');} tft.print(HrsDepartProgHoraireEclairageReglage);         // Affiche le texte
  1307.       tft.print(':');                                                                                                           // Affiche le caractère ":"
  1308.       if (MinsDepartProgHoraireEclairageReglage < 10) {tft.print('0');} tft.print(MinsDepartProgHoraireEclairageReglage);       // Affiche le texte
  1309.       LastHrsDepartProgHoraireEclairageReglage = HrsDepartProgHoraireEclairageReglage;                                          // Mémorise les dernières heures de départ de réglage du programmateur horaire de l'éclairage
  1310.       LastMinsDepartProgHoraireEclairageReglage = MinsDepartProgHoraireEclairageReglage;                                        // Mémorise les dernières minutes de départ de réglage du programmateur horaire de l'éclairage
  1311.     }
  1312.    
  1313.     if (LastHrsArretProgHoraireEclairageReglage != HrsArretProgHoraireEclairageReglage // +++++++++++++++++++++++++++++++++++++ // Si les heures ou les minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  1314.      || LastMinsArretProgHoraireEclairageReglage != MinsArretProgHoraireEclairageReglage)
  1315.     {
  1316.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1317.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1318.       tft.setCursor(300, 87);                                                                                                   // Positionne le texte
  1319.       if (HrsArretProgHoraireEclairageReglage < 10) {tft.print('0');} tft.print(HrsArretProgHoraireEclairageReglage);           // Affiche le texte
  1320.       tft.print(':');                                                                                                        // Affiche le caractère ":"
  1321.       if (MinsArretProgHoraireEclairageReglage < 10) {tft.print('0');} tft.print(MinsArretProgHoraireEclairageReglage);         // Affiche le texte
  1322.       LastHrsArretProgHoraireEclairageReglage = HrsArretProgHoraireEclairageReglage;                                            // Mémorise le dernières heures d'arrêt de réglage du programmateur horaire de l'éclairage
  1323.       LastMinsArretProgHoraireEclairageReglage = MinsArretProgHoraireEclairageReglage;                                          // Mémorise les dernières minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  1324.     }
  1325.    
  1326.     if (LastMins != Mins) // -------------------------------------------------------------------------------------------------- // Si les minutes courantes ont changé
  1327.     {
  1328.         tft.setTextColor(WHITE, BLACK); tft.setTextSize(5);                                                                       // Définit la couleur et la taille
  1329.       tft.setCursor(122, 198);                                                                                                  // Définit la position
  1330.       if (Hrs < 10) {tft.print('0');} tft.print(Hrs);                                                                           // Affiche les heures courantes
  1331.       tft.fillCircle(198, 226, 4, WHITE); tft.fillCircle(198, 208, 4, WHITE);                                                   // Affiche les deux points ":" de l'heure
  1332.       tft.setCursor(218, 198);                                                                                                  // Définit la position
  1333.       if (Mins < 10) {tft.print('0');} tft.print(Mins);                                                                         // Affiche les minutes courantes
  1334.       LastMins = Mins;                                                                                                         // Mémorise les dernières minutes courantes
  1335.     }
  1336.   }
  1337. //**************************************************************************************************************************************************************************
  1338.   else if (PageCourante == 104 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 104 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage du programmateur horaire des repas
  1339.   {
  1340.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  1341.     {
  1342.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1343.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  1344.      
  1345.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  1346.      
  1347.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  1348.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  1349.      tft.setCursor(60, 8); LectureMemoireFlash(message31);                                                                     // Positionne et Affiche le titre "REGLAGE PROGRAMMATEUR REPAS"
  1350.      
  1351.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1352.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1353.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1354.      
  1355.       tft.drawLine(5, 175, 480, 175, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  1356.       tft.drawLine(5, 176, 480, 176, DARKRED);                                                                                  // Trace une ligne rouge horizontale
  1357.      
  1358.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  1359.       tft.setTextSize(2);                                                                                                       // Définit la taille
  1360.       tft.setCursor(50, 55); LectureMemoireFlash(message32);                                                                    // Positionne et Affiche "HEURE REPAS 1"
  1361.       tft.setCursor(310, 55); LectureMemoireFlash(message33);                                                                   // Positionne et Affiche "HEURE REPAS 2"
  1362.      
  1363.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1364.       tft.drawRect(64, 130, 25, 25, GREEN); tft.drawRect(118, 130, 25, 25, GREEN);                                              // Dessine les 4 boutons + et les cadres
  1365.       tft.setTextSize(2); tft.setCursor(72, 136); tft.print('+'); tft.setCursor(126, 136); tft.print('+');
  1366.       tft.drawRect(326, 130, 25, 25, GREEN); tft.drawRect(380, 130, 25, 25, GREEN);
  1367.       tft.setCursor(333, 136); tft.print('+'); tft.setCursor(387, 136); tft.print('+');
  1368.      
  1369.       if (LastPageCourante != 204) // ----------------------------------------------------------------------------------------- // Si la dernière Page courante est différente de 204
  1370.       {
  1371.         HrsDepart1ProgHoraireRepasReglage = HrsDepart1ProgHoraireRepas;                                                         // Transfère les heures de départ1 du programmateur horaire des repas dans les heures de départ1 de réglage du programmateur horaire des repas
  1372.         MinsDepart1ProgHoraireRepasReglage = MinsDepart1ProgHoraireRepas;                                                       // Transfère les minutes de départ1 du programmateur horaire des repas dans les minutes de départ1 de réglage du programmateur horaire des repas
  1373.         HrsDepart2ProgHoraireRepasReglage = HrsDepart2ProgHoraireRepas;                                                         // Transfère les heures de départ2 du programmateur horaire des repas dans les heures de départ2 de réglage du programmateur horaire des repas
  1374.         MinsDepart2ProgHoraireRepasReglage = MinsDepart2ProgHoraireRepas;                                                       // Transfère les minutes de départ2 du programmateur horaire des repas dans les Minutes de départ2 de réglage du programmateur horaire des repas
  1375.         ModeProgHoraireRepasReglage = ModeProgHoraireRepas;                                                                     // Transfère l'indicateur du mode de fonctionnement du programmateur horaire des repas dans l'indicateur de réglage du mode de fonctionnement du programmateur horaire des repas
  1376.         for (int i = 0; i < 7; i++)                                                                                             // Transfère l'itération du programmateur horaire des repas dans l'itération de réglage du programmateur horaire des repas
  1377.         {
  1378.           IterationProgHoraireRepasReglage[i] = IterationProgHoraireRepas[i];
  1379.         }
  1380.       }
  1381.      
  1382.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1383.     }
  1384.    
  1385.     if (LastHrsDepart1ProgHoraireRepasReglage != HrsDepart1ProgHoraireRepasReglage // +++++++++++++++++++++++++++++++++++++++++ // Si les heures ou les minutes de départ1 de réglage du programmateur horaire des repas ont changé
  1386.      || LastMinsDepart1ProgHoraireRepasReglage != MinsDepart1ProgHoraireRepasReglage)
  1387.     {
  1388.    tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1389.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1390.       tft.setCursor(60, 87);                                                                                                    // Positionne le texte
  1391.       if (HrsDepart1ProgHoraireRepasReglage < 10) {tft.print('0');} tft.print(HrsDepart1ProgHoraireRepasReglage);               // Affiche le texte
  1392.       tft.print(':');                                                                                                          // Affiche le caractère ":"
  1393.       if (MinsDepart1ProgHoraireRepasReglage < 10) {tft.print('0');} tft.print(MinsDepart1ProgHoraireRepasReglage);             // Affiche le texte
  1394.       LastHrsDepart1ProgHoraireRepasReglage = HrsDepart1ProgHoraireRepasReglage;                                                // Mémorise les dernières heures de départ1 de réglage du programmateur horaire des repas
  1395.       LastMinsDepart1ProgHoraireRepasReglage = MinsDepart1ProgHoraireRepasReglage;                                              // Mémorise les dernière minutes de départ1 de réglage du programmateur horaire des repas
  1396.     }
  1397.    
  1398.     if (LastHrsDepart2ProgHoraireRepasReglage != HrsDepart2ProgHoraireRepasReglage // +++++++++++++++++++++++++++++++++++++++++ // Si Si les heures ou les minutes de départ2 de réglage du programmateur horaire des repas ont changé
  1399.      || LastMinsDepart2ProgHoraireRepasReglage != MinsDepart2ProgHoraireRepasReglage)
  1400.     {
  1401.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1402.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1403.       tft.setCursor(326, 87);                                                                                                   // Positionne le texte
  1404.       if (HrsDepart2ProgHoraireRepasReglage < 10) {tft.print('0');} tft.print(HrsDepart2ProgHoraireRepasReglage);               // Affiche le texte
  1405.       tft.print(':');                                                                                                            // Affiche le caractère ":"
  1406.       if (MinsDepart2ProgHoraireRepasReglage < 10) {tft.print('0');} tft.print(MinsDepart2ProgHoraireRepasReglage);             // Affiche le texte
  1407.       LastHrsDepart2ProgHoraireRepasReglage = HrsDepart2ProgHoraireRepasReglage;                                                // Mémorise les dernières heures de départ2 de réglage du programmateur horaire des repas
  1408.       LastMinsDepart2ProgHoraireRepasReglage = MinsDepart2ProgHoraireRepasReglage;                                              // Mémorise les dernière minutes de départ2 de réglage du programmateur horaire des repas
  1409.     }
  1410.    
  1411.     if (LastMins != Mins) // -------------------------------------------------------------------------------------------------- // Si les minutes courantes ont changé
  1412.     {
  1413.      tft.setTextColor(WHITE, BLACK); tft.setTextSize(6);                                                                       // Définit la couleur et la taille
  1414.       tft.setCursor(155, 205);                                                                                                  // Définit la position
  1415.       if (Hrs < 10) {tft.print('0');} tft.print(Hrs);                                                                           // Affiche les heures courantes
  1416.       tft.fillCircle(230, 230, 4, WHITE); tft.fillCircle(230, 212, 4, WHITE);                                                   // Affiche les deux points ":" de l'heure
  1417.       tft.setCursor(240, 205);                                                                                                  // Définit la position
  1418.       if (Mins < 10) {tft.print('0');} tft.print(Mins);                                                                         // Affiche les minutes courantes
  1419.       LastMins = Mins;                                                                                                       // Mémorise les dernières minutes courantes
  1420.     }
  1421.   }
  1422. //**************************************************************************************************************************************************************************
  1423.   else if (PageCourante == 501 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 501 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Réglage de l'heure courante
  1424.   {
  1425.     if (LastPageCourante != PageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  1426.     {
  1427.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1428.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  1429.      
  1430.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  1431.      
  1432.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  1433.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  1434.       tft.setCursor(60, 8); LectureMemoireFlash(message34);                                                                     // Positionne et Affiche le titre "REGLAGE DE L'HEURE COURANTE"
  1435.      
  1436.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1437.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1438.      
  1439.       tft.drawRoundRect(100, 42, 286, 76, 12, 0x3B0A);                                                                           // Affiche le cadre de l'heure courante
  1440.       tft.drawRoundRect(96, 40, 290, 80, 12, 0x3B0A);
  1441.      
  1442.       tft.fillCircle(250, 95, 4, GREEN); tft.fillCircle(250, 72, 4, BLUE);                                                      // Affiche les deux points ":" de l'heure
  1443.      
  1444.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1445.       tft.drawRect(64, 130, 25, 25, GREEN); tft.drawRect(130, 130, 25, 25, GREEN);                                              // Dessine les 4 boutons + et - et les cadres
  1446.       tft.setTextSize(2); tft.setCursor(71, 136); tft.print('-'); tft.setCursor(137, 136); tft.print('+');
  1447.       tft.drawRect(290, 130, 25, 25, GREEN); tft.drawRect(360, 130, 25, 25, GREEN);
  1448.       tft.setCursor(297, 136); tft.print('-'); tft.setCursor(367, 136); tft.print('+');
  1449.      
  1450.       HrsReglage = Hrs;                                                                                                         // Transfère les heures courantes dans les heures de réglage
  1451.       MinsReglage = Mins;                                                                                                       // Transfère les minutes courantes dans les heures de réglage
  1452.      
  1453.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1454.     }
  1455.    
  1456.     if (LastHrsReglage != HrsReglage || LastMinsReglage != MinsReglage) // ---------------------------------------------------- // Si les heures ou les minutes de réglages ont changé
  1457.     {
  1458.       tft.setTextColor(BLUE, BLACK); tft.setTextSize(8);                                                                        // Définit le couleur et la taille
  1459.       tft.setCursor(130, 50);                                                                                                    // Positionne le texte
  1460.       if (HrsReglage < 10) {tft.print('0');} tft.print(HrsReglage);                                                             // Affiche les heures de réglage
  1461.       tft.setCursor(280, 50);                                                                                                   // Positionne le texte
  1462.       if (MinsReglage < 10) {tft.print('0');} tft.print(MinsReglage);                                                           // Affiche les minutes de réglage
  1463.       LastHrsReglage = HrsReglage;                                                                                              // Mémorise les dernières heures de réglage
  1464.       LastMinsReglage = MinsReglage;                                                                                            // Mémorise les dernières minutes de réglage
  1465.     }
  1466.   }
  1467. //**************************************************************************************************************************************************************************
  1468.   else if (PageCourante == 502 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 502 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Réglage de la date courante
  1469.   {
  1470.     if (LastPageCourante != PageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  1471.     {
  1472.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1473.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  1474.      
  1475.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  1476.      
  1477.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  1478.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  1479.       tft.setCursor(90, 8); LectureMemoireFlash(message35);                                                                     // Positionne et Affiche le titre "REGLAGE DE LA DATE COURANTE"
  1480.      
  1481.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1482.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1483.      
  1484.       tft.setTextSize(2);                                                                                                       // Définit la taille
  1485.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1486.       tft.setCursor(90, 105); LectureMemoireFlash(message38);                                                                   // Positionne et Affiche "JOUR"
  1487.       tft.setCursor(90, 157); LectureMemoireFlash(message39);                                                                   // Positionne et Affiche "MOIS"
  1488.       tft.setCursor(90, 209); LectureMemoireFlash(message40);                                                                   // Positionne et Affiche "ANNEE"
  1489.      
  1490.       tft.setTextSize(2);
  1491.       tft.drawRect(200, 203, 25, 25, GREEN); tft.drawRect(370, 203, 25, 25, GREEN);                                             // Dessine les 6 boutons + et - et les cadres
  1492.       tft.setCursor(208, 209); tft.print('-'); tft.setCursor(378, 209); tft.print('+');
  1493.       tft.drawRect(200, 151, 25, 25, GREEN); tft.drawRect(370, 151, 25, 25, GREEN);
  1494.       tft.setCursor(208, 157); tft.print('-'); tft.setCursor(378, 157); tft.print('+');
  1495.       tft.drawRect(200, 99, 25, 25, GREEN); tft.drawRect(370, 99, 25, 25, GREEN);
  1496.       tft.setCursor(208, 105); tft.print('-'); tft.setCursor(378, 105); tft.print('+');
  1497.      
  1498.       JourReglage = Jour;                                                                                                       // Transfère le jour du mois de la date courante dans le jour de réglage
  1499.       MoisReglage = Mois;                                                                                                       // Transfère le mois de la date courante dans Mois de réglage
  1500.       AnneeReglage = Annee;                                                                                                     // Transfère l'année de la date courante dans l'année de réglage
  1501.      
  1502.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1503.     }
  1504.    
  1505.     if (LastJourSemaine != JourSemaine) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le dernier jour de la semaine a changé
  1506.     {
  1507.       uint16_t couleurBoutonsJour;                                                                                              // Déclarare la variable couleur des boutons
  1508.      
  1509.       tft.setTextSize(2);                                                                                                       // Définit la taille
  1510.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur
  1511.      
  1512.       if (JourSemaine == 0) {couleurBoutonsJour = 0x195B62;} else {couleurBoutonsJour = RED;}                                   // Sélectionne la couleur
  1513.       tft.fillCircle(90, 60, 16, couleurBoutonsJour);                                                                           // Dessine le bouton Dimanche "D"
  1514.       tft.drawCircle(90, 60, 20, couleurBoutonsJour);  
  1515.       tft.setCursor(86, 53); tft.print('D');                                                                                    // Positionne et Affiche le texte
  1516.      
  1517.       if (JourSemaine == 1) {couleurBoutonsJour = 0x195B62;} else {couleurBoutonsJour = RED;}                                   // Sélectionne la couleur
  1518.       tft.fillCircle(140, 60, 16, couleurBoutonsJour);                                                                           // Dessine le bouton Lundi "L"
  1519.       tft.drawCircle(140, 60, 20, couleurBoutonsJour);
  1520.       tft.setCursor(136, 53); tft.print('L');                                                                                    // Positionne et Affiche le texte
  1521.      
  1522.       if (JourSemaine == 2) {couleurBoutonsJour = 0x195B62;} else {couleurBoutonsJour = RED;}                                   // Sélectionne la couleur
  1523.       tft.fillCircle(190, 60, 16, couleurBoutonsJour);                                                                          // Dessine le bouton Mardi "M"
  1524.       tft.drawCircle(190, 60, 20, couleurBoutonsJour);
  1525.       tft.setCursor(186, 53); tft.print('M');                                                                                   // Positionne et Affiche le texte
  1526.      
  1527.       if (JourSemaine == 3) {couleurBoutonsJour = 0x195B62;} else {couleurBoutonsJour = RED;}                                   // Sélectionne la couleur
  1528.       tft.fillCircle(240, 60, 16, couleurBoutonsJour);                                                                          // Dessine le bouton Mercredi "M"
  1529.       tft.drawCircle(240, 60, 20, couleurBoutonsJour);
  1530.       tft.setCursor(236, 53); tft.print('M');                                                                                   // Positionne et Affiche le texte
  1531.      
  1532.       if (JourSemaine == 4) {couleurBoutonsJour = 0x195B62;} else {couleurBoutonsJour = RED;}                                   // Sélectionne la couleur
  1533.       tft.fillCircle(290, 60, 16, couleurBoutonsJour);                                                                          // Dessine le bouton Jeudi "J"
  1534.       tft.drawCircle(290, 60, 20, couleurBoutonsJour);
  1535.       tft.setCursor(286, 53); tft.print('J');                                                                                   // Positionne et Affiche le texte
  1536.      
  1537.       if (JourSemaine == 5) {couleurBoutonsJour = 0x195B62;} else {couleurBoutonsJour = RED;}                                   // Sélectionne la couleur
  1538.       tft.fillCircle(340, 60, 16, couleurBoutonsJour);                                                                          // Dessine le bouton Vendredi "V"
  1539.       tft.drawCircle(340, 60, 20, couleurBoutonsJour);
  1540.       tft.setCursor(336, 53); tft.print('V');                                                                                   // Positionne et Affiche le texte
  1541.      
  1542.       if (JourSemaine == 6) {couleurBoutonsJour = 0x195B62;} else {couleurBoutonsJour = RED;}                                   // Sélectionne la couleur
  1543.       tft.fillCircle(390, 60, 16, couleurBoutonsJour);                                                                          // Dessine le bouton Samedi "S"
  1544.       tft.drawCircle(390, 60, 20, couleurBoutonsJour);
  1545.       tft.setCursor(386, 53); tft.print('S');                                                                                   // Positionne et Affiche le texte
  1546.      
  1547.       LastJourSemaine = JourSemaine;                                                                                            // Mémorise le dernier jour de la semaine
  1548.     }
  1549.    
  1550.     if (LastJourReglage != JourReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le dernier jour de réglage a changé
  1551.     {
  1552.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1553.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1554.       tft.setCursor(265, 100); if (JourReglage < 10) {tft.print('0');} tft.print(JourReglage);                                  // Positionne et Affiche la variable de réglage
  1555.       LastJourReglage = JourReglage;                                                                                            // Mémorise le dernier jour de réglage
  1556.     }
  1557.    
  1558.     if (LastMoisReglage != MoisReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le dernier mois de réglage a changé
  1559.     {
  1560.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1561.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1562.       tft.setCursor(265, 152); if (MoisReglage < 10) {tft.print('0');} tft.print(MoisReglage);                                  // Positionne et Affiche le mois de réglage
  1563.       LastMoisReglage = MoisReglage;                                                                                            // Mémorise le dernier mois de réglage
  1564.     }
  1565.    
  1566.     if (LastAnneeReglage != AnneeReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la dernière année de réglage a changé
  1567.     {
  1568.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1569.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1570.       tft.setCursor(265, 204); tft.print(AnneeReglage);                                                                         // Positionne et Affiche la dernière année de réglage
  1571.       LastAnneeReglage = AnneeReglage;                                                                                          // Mémorise la dernière année de réglage
  1572.     }
  1573.   }
  1574. //**************************************************************************************************************************************************************************
  1575.   else if (PageCourante == 105 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 105 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Menu setup
  1576.   {
  1577.     if (LastPageCourante != PageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  1578.     {
  1579.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1580.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  1581.      
  1582.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  1583.      
  1584.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  1585.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  1586.       tft.setCursor(160, 8); LectureMemoireFlash(message46);                                                                    // Positionne et Affiche le titre "MENU SETUP"
  1587.      
  1588.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1589.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  1590.      
  1591.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1592.     }
  1593.    
  1594.     if (LastetatBoutonReglagesDefaut != etatBoutonReglagesDefaut) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'état du bouton "REGLAGES PAR DEFAUT" a changé
  1595.     {
  1596.       boolean autorisationAffichageValidationReglages = false;                                                                  // Indicateur d'autorisation d'afficher la Page validation réglages
  1597.      
  1598.       tft.setTextColor(WHITE); tft.setTextSize(2);                                                                              // Définit la couleur et la taille
  1599.       if (etatBoutonReglagesDefaut) // ---------------------------------------------------------------------------------------- // Si l'état du bouton "REGLAGES PAR DEFAUT" est activé
  1600.       {
  1601.         tft.fillRoundRect(120, 56, 236, 25, 12, KHAKIGREEN);                                                                     // Affiche le bouton "REGLAGES PAR DEFAUT" en vert
  1602.         tft.drawRoundRect(118, 54, 240, 29, 12, KHAKIGREEN);
  1603.         tft.setCursor(125, 60); LectureMemoireFlash(message47);                                                                  // Affiche le texte "REGLAGES PAR DEFAUT"
  1604.         etatBoutonReglagesDefaut = false;                                                                                       // Désactive l'état du bouton "REGLAGES PAR DEFAUT"
  1605.         delay(1000);                                                                                                            // Temporise 1 seconde
  1606.         autorisationAffichageValidationReglages = true;                                                                         // Active l'indicateur d'autorisation d'afficher la Page validation réglages
  1607.       }
  1608.       if (!etatBoutonReglagesDefaut) // --------------------------------------------------------------------------------------- // Si l'état du bouton "REGLAGES PAR DEFAUT" est activé
  1609.       {
  1610.         tft.fillRoundRect(120, 56, 236, 25, 12, RED);                                                                            // Affiche le bouton "REGLAGES PAR DEFAUT" en rouge
  1611.         tft.drawRoundRect(118, 54, 240, 29, 12, RED);
  1612.         tft.setCursor(125, 60); LectureMemoireFlash(message47);                                                                  // Affiche le texte "REGLAGES PAR DEFAUT"
  1613.         if (autorisationAffichageValidationReglages) // ....................................................................... // Si l'incateur d'autorisation d'afficher la Page validation réglages est activé
  1614.         {
  1615.           FonctionPageAffichageValidationReglages();                                                                            // Appelle la fonction d'affichage validation réglages
  1616.           FonctionReinitialisationVariablesAffichage();                                                                         // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1617.         }
  1618.       }
  1619.       LastetatBoutonReglagesDefaut = etatBoutonReglagesDefaut;                                                                  // Mémorise le dernier état du bouton "REGLAGES PAR DEFAUT"
  1620.     }
  1621.    
  1622.     if (LastetatBoutonReglagesModeEco != etatBoutonReglagesModeEco && etatReactivationAffichagePages) // ++++++++++++++++++++++ // Si l'état du bouton "MODE ECO ON/OFF" a changé
  1623.     {
  1624.       tft.setTextColor(WHITE); tft.setTextSize(2);                                                                              // Définit la couleur et la taille
  1625.       if (ModeEco) // --------------------------------------------------------------------------------------------------------- // Si l'état de l'indicateur du mode Eco est activé
  1626.       {
  1627.      tft.fillRoundRect(120, 106, 236, 25, 12, KHAKIGREEN);                                                                    // Affiche le bouton "MODE ECO ON" en vert
  1628.         tft.drawRoundRect(118, 104, 240, 29, 12, KHAKIGREEN);
  1629.         tft.setCursor(140, 110); LectureMemoireFlash(message50);                                                                // Affiche le texte "MODE ECO ON"
  1630.       }
  1631.       else if (!ModeEco) // --------------------------------------------------------------------------------------------------- // Si l'état de l'indicateur du mode Eco est désactivé
  1632.       {
  1633.         tft.fillRoundRect(120, 106, 236, 25, 12, RED);                                                                           // Affiche le bouton "MODE ECO OFF" en rouge
  1634.         tft.drawRoundRect(118, 104, 240, 29, 12, RED);
  1635.         tft.setCursor(140, 110); LectureMemoireFlash(message51);                                                                // Affiche le texte "MODE ECO OFF"
  1636.       }
  1637.      
  1638.       LastetatBoutonReglagesModeEco = etatBoutonReglagesModeEco;                                                                // Mémorise le dernier état du bouton "MODE ECO ON/OFF"
  1639.     }
  1640.    
  1641.     if (LastetatBoutonReglagesModeMute != etatBoutonReglagesModeMute && etatReactivationAffichagePages) // ++++++++++++++++++++ // Si l'état du bouton "MODE MUTE ON/OFF" a changé
  1642.     {
  1643.       tft.setTextColor(WHITE); tft.setTextSize(2);                                                                              // Définit la couleur et la taille
  1644.       if (ModeMute) // -------------------------------------------------------------------------------------------------------- // Si l'état de l'indicateur du mode Mute est activé
  1645.       {
  1646.      tft.fillRoundRect(120, 156, 236, 25, 12, KHAKIGREEN);                                                                    // Affiche le bouton "MODE MUTE ON" en vert
  1647.         tft.drawRoundRect(118, 154, 240, 29, 12, KHAKIGREEN);
  1648.         tft.setCursor(140, 160); LectureMemoireFlash(message52);                                                                // Affiche le texte "MODE MUTE ON"
  1649.       }
  1650.       else if (!ModeMute) // -------------------------------------------------------------------------------------------------- // Si l'état de l'indicateur du mode Mute est désactivé
  1651.       {
  1652.         tft.fillRoundRect(120, 156, 236, 25, 12, RED);                                                                           // Affiche le bouton "MODE MUTE OFF" en rouge
  1653.         tft.drawRoundRect(118, 154, 240, 29, 12, RED);
  1654.         tft.setCursor(140, 160); LectureMemoireFlash(message53);                                                                // Affiche le texte "MODE MUTECO OFF"
  1655.       }
  1656.      
  1657.       LastetatBoutonReglagesModeMute = etatBoutonReglagesModeMute;                                                              // Mémorise le dernier état du bouton "MODE MUTE ON/OFF"
  1658.     }
  1659.   }
  1660. //**************************************************************************************************************************************************************************
  1661.   else if (PageCourante == 204 && etatReactivationAffichagePages) // ********************************************************** // Si la Page courante 204 est sélectionnée et Si l'indicateur de réactivation d'affichage des Pages est activé => Page réglage du programmateur horaire des repas
  1662.   {
  1663.     if (PageCourante != LastPageCourante) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante a changé
  1664.     {
  1665.       tft.fillScreen(BLACK);                                                                                                    // Initialise la couleur du fond d'écran
  1666.      
  1667.       FonctionAffichageIconesPagesReglages();                                                                                   // Appelle la fonction d'affichage des icônes des Pages de réglages
  1668.      
  1669.       tft.setTextColor(WHITE);                                                                                                  // Définit la couleur du titre
  1670.       tft.setTextSize(2);                                                                                                       // Définit la taille du titre
  1671.       tft.setCursor(60, 8); LectureMemoireFlash(message31);                                                                     // Positionne et Affiche le titre "REGLAGE PROGRAMMATEUR REPAS"
  1672.      
  1673.       tft.drawLine(5, 31, 480, 31, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1674.       tft.drawLine(5, 32, 480, 32, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1675.       tft.drawLine(5, 33, 480, 33, DARKRED);                                                                                    // Trace une ligne rouge horizontale
  1676.      
  1677.       tft.setTextColor(RED, BLACK);                                                                                             // Définit la couleur
  1678.       tft.setCursor(235, 275); LectureMemoireFlash(message12);                                                                  // Affiche le texte "MODE"
  1679.       tft.setCursor(235, 290); LectureMemoireFlash(message63);                                                                  // Affiche "ON/OFF"
  1680.      
  1681.       tft.setTextColor(WHITE, BLACK);                                                                                           // Définit la couleur
  1682.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1683.       tft.setCursor(80, 46); LectureMemoireFlash(message64);                                                                    // Positionne et Affiche "REPAS 1 :"
  1684.       tft.setCursor(80, 94); LectureMemoireFlash(message65);                                                                    // Positionne et Affiche "REPAS 2 :"
  1685.      
  1686.       FonctionReinitialisationVariablesAffichage();                                                                             // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1687.      
  1688.       tft.setTextColor(BLUE, BLACK);                                                                                            // Définit la couleur
  1689.       tft.setTextSize(4);                                                                                                       // Définit la taille
  1690.       tft.setCursor(270, 42);                                                                                                   // Positionne le texte
  1691.       if (HrsDepart1ProgHoraireRepas < 10) {tft.print('0');} tft.print(HrsDepart1ProgHoraireRepas);                             // Affiche le texte
  1692.       tft.setCursor(325, 42); tft.print(':');                                                                                   // Positionne et Affiche le caractère ":"
  1693.       tft.setCursor(350, 42);                                                                                                   // Positionne le texte
  1694.       if (MinsDepart1ProgHoraireRepas < 10) {tft.print('0');} tft.print(MinsDepart1ProgHoraireRepas);                           // Affiche le texte
  1695.       tft.setCursor(270, 90);                                                                                                   // Positionne le texte
  1696.       if (HrsDepart2ProgHoraireRepas < 10) {tft.print('0');} tft.print(HrsDepart2ProgHoraireRepas);                             // Affiche le texte
  1697.       tft.setCursor(325, 90); tft.print(':');                                                                                   // Positionne et Affiche le caractère ":"
  1698.       tft.setCursor(350, 90);                                                                                                   // Positionne le texte
  1699.       if (MinsDepart2ProgHoraireRepas < 10) {tft.print('0');} tft.print(MinsDepart2ProgHoraireRepas);                           // Positionne et Affiche le texte
  1700.      
  1701.       LastPageCourante = PageCourante;                                                                                          // Mémorise la dernière Page courante
  1702.     }
  1703.    
  1704.     uint16_t couleurBoutonsIteration;                                                                                           // Déclarare la variable couleur des boutons de l'itération
  1705.    
  1706.     tft.setTextSize(2);                                                                                                         // Définit la taille
  1707.     tft.setTextColor(WHITE);                                                                                                    // Définit la couleur
  1708.    
  1709.     if (LastIterationProgHoraireRepasReglage[0] != IterationProgHoraireRepasReglage[0]) // ++++++++++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire des repas a changé
  1710.     {
  1711.       if (!IterationProgHoraireRepasReglage[0]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;}     // Sélectionne la couleur
  1712.       tft.fillCircle(100, 190, 16, couleurBoutonsIteration);                                                                     // Dessine le bouton Dimanche "D"
  1713.       tft.drawCircle(100, 190, 20, couleurBoutonsIteration);
  1714.       tft.setCursor(95, 183); tft.print('D');                                                                                   // Positionne et Affiche le texte
  1715.       LastIterationProgHoraireRepasReglage[0] = IterationProgHoraireRepasReglage[0];                                            // Mémorise l'itération de réglage du programmateur horaire des repas
  1716.     }
  1717.     if (LastIterationProgHoraireRepasReglage[1] != IterationProgHoraireRepasReglage[1]) // ++++++++++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire des repas a changé
  1718.     {
  1719.       if (!IterationProgHoraireRepasReglage[1]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;}     // Sélectionne la couleur
  1720.       tft.fillCircle(150, 190, 16, couleurBoutonsIteration);                                                                     // Dessine le bouton Lundi "L"
  1721.       tft.drawCircle(150, 190, 20, couleurBoutonsIteration);
  1722.       tft.setCursor(145, 183); tft.print('L');                                                                                   // Positionne et Affiche le texte
  1723.       LastIterationProgHoraireRepasReglage[1] = IterationProgHoraireRepasReglage[1];                                            // Mémorise l'itération de réglage du programmateur horaire des repas
  1724.     }
  1725.     if (LastIterationProgHoraireRepasReglage[2] != IterationProgHoraireRepasReglage[2]) // ++++++++++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire des repas a changé
  1726.     {
  1727.       if (!IterationProgHoraireRepasReglage[2]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;}     // Sélectionne la couleur
  1728.       tft.fillCircle(200, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Mardi "M"
  1729.       tft.drawCircle(200, 190, 20, couleurBoutonsIteration);
  1730.       tft.setCursor(195, 183); tft.print('M');                                                                                  // Positionne et Affiche le texte
  1731.       LastIterationProgHoraireRepasReglage[2] = IterationProgHoraireRepasReglage[2];                                            // Mémorise l'itération de réglage du programmateur horaire des repas
  1732.     }
  1733.     if (LastIterationProgHoraireRepasReglage[3] != IterationProgHoraireRepasReglage[3]) // ++++++++++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire des repas a changé
  1734.     {
  1735.       if (!IterationProgHoraireRepasReglage[3]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;}     // Sélectionne la couleur
  1736.       tft.fillCircle(250, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Mercredi "M"
  1737.       tft.drawCircle(250, 190, 20, couleurBoutonsIteration);
  1738.       tft.setCursor(245, 183); tft.print('M');                                                                                  // Positionne et Affiche le texte
  1739.       LastIterationProgHoraireRepasReglage[3] = IterationProgHoraireRepasReglage[3];                                            // Mémorise l'itération de réglage du programmateur horaire des repas
  1740.     }
  1741.     if (LastIterationProgHoraireRepasReglage[4] != IterationProgHoraireRepasReglage[4]) // ++++++++++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire des repas a changé
  1742.     {
  1743.       if (!IterationProgHoraireRepasReglage[4]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;}     // Sélectionne la couleur
  1744.       tft.fillCircle(300, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Jeudi "J"
  1745.       tft.drawCircle(300, 190, 20, couleurBoutonsIteration);
  1746.       tft.setCursor(295, 183); tft.print('J');                                                                                  // Positionne et Affiche le texte
  1747.       LastIterationProgHoraireRepasReglage[4] = IterationProgHoraireRepasReglage[4];                                            // Mémorise l'itération de réglage du programmateur horaire des repas
  1748.     }
  1749.     if (LastIterationProgHoraireRepasReglage[5] != IterationProgHoraireRepasReglage[5]) // ++++++++++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire des repas a changé
  1750.     {
  1751.       if (!IterationProgHoraireRepasReglage[5]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;}     // Sélectionne la couleur
  1752.       tft.fillCircle(350, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Vendredi "V"
  1753.       tft.drawCircle(350, 190, 20, couleurBoutonsIteration);
  1754.       tft.setCursor(345, 183); tft.print('V');                                                                                  // Positionne et Affiche le texte
  1755.       LastIterationProgHoraireRepasReglage[5] = IterationProgHoraireRepasReglage[5];                                            // Mémorise l'itération de réglage du programmateur horaire des repas
  1756.     }
  1757.     if (LastIterationProgHoraireRepasReglage[6] != IterationProgHoraireRepasReglage[6]) // ++++++++++++++++++++++++++++++++++++ // Si l'itération de réglage du programmateur horaire des repas a changé
  1758.     {
  1759.       if (!IterationProgHoraireRepasReglage[6]) {couleurBoutonsIteration = RED;} else {couleurBoutonsIteration = 0x195B62;}     // Sélectionne la couleur
  1760.       tft.fillCircle(400, 190, 16, couleurBoutonsIteration);                                                                    // Dessine le bouton Samedi "S"
  1761.       tft.drawCircle(400, 190, 20, couleurBoutonsIteration);
  1762.       tft.setCursor(395, 183); tft.print('S');                                                                                  // Positionne et Affiche le texte
  1763.       LastIterationProgHoraireRepasReglage[6] = IterationProgHoraireRepasReglage[6];                                            // Mémorise l'itération de réglage du programmateur horaire des repas
  1764.     }
  1765.    
  1766.     if (LastModeProgHoraireRepasReglage != ModeProgHoraireRepasReglage) // ++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire des repas a changé
  1767.     {
  1768.       tft.setTextColor(RED);                                                                                                    // Définit la couleur
  1769.       tft.setTextSize(3);                                                                                                       // Définit la taille
  1770.       tft.setCursor(80, 280); LectureMemoireFlash(message36); tft.setCursor(365, 280); LectureMemoireFlash(message37);          // Positionne et Affiche "ON" et "OFF"
  1771.       if (ModeProgHoraireRepasReglage) // ------------------------------------------------------------------------------------- // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire des repas est activé
  1772.       {
  1773.         tft.drawRect(71, 270, 51, 39, GREEN);                                                                                   // Affiche un cadre autour de "ON"
  1774.         tft.drawRect(355, 270, 69, 39, BLACK);                                                                                  // Efface le cadre autour de "OFF"
  1775.       }
  1776.       else if (!ModeProgHoraireRepasReglage) // ------------------------------------------------------------------------------- // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire des repas est désactivé
  1777.       {
  1778.         tft.drawRect(355, 270, 69, 39, GREEN);                                                                                  // Affiche un cadre autour de "OFF"
  1779.         tft.drawRect(71, 270, 51, 39, BLACK);                                                                                   // Efface le cadre autour de "ON"
  1780.       }
  1781.      
  1782.       LastModeProgHoraireRepasReglage = ModeProgHoraireRepasReglage;                                                            // Mémorise le dernier indicateur de réglage du mode de fonctionnement du programmateur horaire des repas
  1783.     }
  1784.   }
  1785.  
  1786. //**************************************************************************************************************************************************************************
  1787.   if (!ModeManuelTemperature) // ********************************************************************************************** // Si l'indicateur du mode manuel de la température est désactivé
  1788.   {
  1789.     if (Hrs == HrsDepartSeuilsModeJour && Mins == MinsDepartSeuilsModeJour && Secs <= 2) // +++++++++++++++++++++++++++++++++++ // Si l'heure courante est égale à l'heure de départ du mode jour
  1790.     {
  1791.       SeuilTemperatureJourNuit = SeuilTemperatureJour;                                                                          // Transfère le seuil de jour de la température dans le seuil jour / nuit de température
  1792.       ModeJourSeuilTemperature = 1;                                                                                             // Active l'indicateur du mode jour pour les seuils de la température
  1793.       if (LastModeJourSeuilTemperature != ModeJourSeuilTemperature) {if (PageCourante == 0) {LastPageCourante = -1;}}           // Réinitialise la dernière Page courante
  1794.     }
  1795.     else if (Hrs == HrsDepartSeuilsModeNuit && Mins == MinsDepartSeuilsModeNuit && Secs <= 2) // ++++++++++++++++++++++++++++++ // Si l'heure courante est égale à l'heure de départ du mode nuit
  1796.     {
  1797.       SeuilTemperatureJourNuit = SeuilTemperatureNuit;                                                                          // Transfère le seuil de nuit de la température dans le seuil jour / nuit de température
  1798.       ModeJourSeuilTemperature = 0;                                                                                             // Désactive l'indicateur du mode jour pour les seuils de la température
  1799.       if (LastModeJourSeuilTemperature != ModeJourSeuilTemperature) {if (PageCourante == 0) {LastPageCourante = -1;}}           // Réinitialise la dernière Page courante
  1800.     }
  1801.    
  1802.     if (TemperatureCourante >= SeuilTemperatureJourNuit && !EtatVentilateur) // +++++++++++++++++++++++++++++++++++++++++++++++ // Si la température courante est supérieure ou égale seuil jour / nuit de température et Si le ventilateur est désactivé
  1803.     {
  1804.       if (t1DebutTempoVentilateurON == 0) {t1DebutTempoVentilateurON = millis();}                                               // Démarre la temporisation d'activation du ventilateur pour interdire des démarrages si le taux d'humidité varie autour du seuil du taux d'humidité
  1805.       if (millis() - t1DebutTempoVentilateurON >= 2000ul && t1DebutTempoVentilateurON != 0) // -------------------------------- // Si le ventilateur est activé depuis plus de 2s
  1806.       {
  1807.         EtatVentilateur = HIGH;                                                                                                 // Active l'indicateur d'état du fonctionnement du ventilateur
  1808.         LastEtatVentilateur = !EtatVentilateur;                                                                                 // Inverse l'indicateur du dernier état du fonctionnement du ventilateur
  1809.         digitalWrite(BrocheLedRougeTemoinVentilateur, EtatVentilateur);                                                         // Active la led témoin de fonctionnement du ventilateur
  1810.         digitalWrite(BrocheRelaisVentilateur, EtatVentilateur);                                                                 // Active le relais du ventilateur
  1811.         t1DebutTempoVentilateurON = 0;                                                                                          // Réinitialise la temporisation d'activation du Ventilateur pour interdire des démarrages si le taux d'humidité varie autour du seuil du taux d'humidité
  1812.         Buzzer(20, 0, 1);                                                                                                       // Active le buzzer 20ms
  1813.       }
  1814.     }
  1815.     else if (TemperatureCourante < SeuilTemperatureJourNuit && EtatVentilateur) // ++++++++++++++++++++++++++++++++++++++++++++ // Si la température courante est inférieure au seuil jour / nuit de température et Si le ventilateur est activé
  1816.     {
  1817.       EtatVentilateur = LOW;                                                                                                    // Active l'indicateur d'état du fonctionnement du ventilateur
  1818.       LastEtatVentilateur = !EtatVentilateur;                                                                                   // Inverse l'indicateur du dernier état du fonctionnement du ventilateur
  1819.       digitalWrite(BrocheLedRougeTemoinVentilateur, EtatVentilateur);                                                           // Désactive la led témoin de fonctionnement du ventilateur
  1820.     }
  1821.   }
  1822.  
  1823. //**************************************************************************************************************************************************************************
  1824.   if (!ModeManuelHumidite) // ************************************************************************************************* // Si l'indicateur du mode manuel du taux d'humidité est désactivé
  1825.   {
  1826.     if (Hrs == HrsDepartSeuilsModeJour && Mins == MinsDepartSeuilsModeJour && Secs <= 2) // +++++++++++++++++++++++++++++++++++ // Si l'heure courante est égale à l'heure de départ du mode jour
  1827.     {
  1828.       SeuilHumiditeJourNuit = SeuilHumiditeJour;                                                                                // Transfère le seuil de jour du taux d'humidité dans le seuil jour / nuit du taux d'humidité
  1829.       ModeJourSeuilHumidite = 1;                                                                                                // Active l'indicateur du mode jour pour les seuils du taux d'humidité
  1830.       if (LastModeJourSeuilHumidite != ModeJourSeuilHumidite) {if (PageCourante == 0) {LastPageCourante = -1;}}                 // Réinitialise la dernière Page courante
  1831.     }
  1832.     else if (Hrs == HrsDepartSeuilsModeNuit && Mins == MinsDepartSeuilsModeNuit && Secs <= 2) // ++++++++++++++++++++++++++++++ // Si l'heure courante est égale à l'heure de départ du mode nuit
  1833.     {
  1834.       SeuilHumiditeJourNuit = SeuilHumiditeNuit;                                                                                // Transfère le seuil de nuit du taux d'humidité dans le seuil jour / nuit du taux d'humidité
  1835.       ModeJourSeuilHumidite = 0;                                                                                                // Désactive l'indicateur du mode jour pour les seuils du taux d'humidité
  1836.       if (LastModeJourSeuilHumidite != ModeJourSeuilHumidite) {if (PageCourante == 0) {LastPageCourante = -1;}}                 // Réinitialise la dernière Page courante
  1837.     }
  1838.    
  1839.     if (TauxHumiditeCourant <= SeuilHumiditeJourNuit && !EtatBrumisateur) // ++++++++++++++++++++++++++++++++++++++++++++++++++ // Si le taux d'humidité courant est inférieur ou égal au seuil jour / nuit du taux d'humidité et Si le brumisateur est désactivé
  1840.     {
  1841.       if (t1DebutTempoBrumisateurON == 0) {t1DebutTempoBrumisateurON = millis();}                                               // Démarre la temporisation d'activation du brumisateur pour interdire des démarrages si le taux d'humidité varie autour du seuil du taux d'humidité
  1842.       if (millis() - t1DebutTempoBrumisateurON >= 2000ul && t1DebutTempoBrumisateurON != 0) // -------------------------------- // Si le brumisateur est activé depuis plus de 2s
  1843.       {
  1844.         EtatBrumisateur = HIGH;                                                                                                 // Active l'indicateur d'état du fonctionnement du brumisateur
  1845.         LastEtatBrumisateur = !EtatBrumisateur;                                                                                 // Inverse l'indicateur du dernier état du fonctionnement du brumisateur
  1846.         digitalWrite(BrocheLedVerteTemoinBrumisateur, EtatBrumisateur);                                                         // Active la led témoin de fonctionnement du brumisateur
  1847.         digitalWrite(BrocheRelaisBrumisateur, EtatBrumisateur);                                                                 // Active le relais du brumisateur
  1848.         t1DebutTempoBrumisateurON = 0;                                                                                          // Réinitialise la temporisation d'activation du brumisateur pour interdire des démarrages si le taux d'humidité varie autour du seuil du taux d'humidité
  1849.         Buzzer(20, 0, 1);                                                                                                       // Active le buzzer 20ms
  1850.       }
  1851.     }
  1852.     else if (TauxHumiditeCourant > SeuilHumiditeJourNuit && EtatBrumisateur) // +++++++++++++++++++++++++++++++++++++++++++++++ // Si le taux d'humidité courant est supérieur au seuil jour / nuit du taux d'humidité et Si le brumisateur est activé
  1853.     {
  1854.       EtatBrumisateur = LOW;                                                                                                    // Désactive l'indicateur d'état du fonctionnement du brumisateur
  1855.       LastEtatBrumisateur = !EtatBrumisateur;                                                                                   // Inverse l'indicateur du dernier état du fonctionnement du brumisateur
  1856.       digitalWrite(BrocheLedVerteTemoinBrumisateur, EtatBrumisateur);                                                           // Désactive la led témoin de fonctionnement du brumisateur
  1857.       digitalWrite(BrocheRelaisBrumisateur, EtatBrumisateur);                                                                   // Désactive le relais du brumisateur
  1858.     }
  1859.   }
  1860.  
  1861. //**************************************************************************************************************************************************************************
  1862.   if (ModeProgHoraireEclairage) // ******************************************************************************************** // Si l'indicateur du mode de fonctionnement du programmateur horaire de l'éclairage est activé
  1863.   {
  1864.     //Serial.println(IterationProgHoraireEclairage[JourSemaine]); // Débug
  1865.     if (IterationProgHoraireEclairage[JourSemaine] == 1) // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'itération du programmateur horaire de l'éclairage du jour de la semaine courant est activé
  1866.     {
  1867.       if (Hrs == HrsDepartProgHoraireEclairage && Mins == MinsDepartProgHoraireEclairage && Secs <= 2) // --------------------- // Si l'heure courante est égale à l'heure de départ du programmateur horaire de l'éclairage
  1868.       {
  1869.         EtatEclairage = HIGH;                                                                                                   // Active l'indicateur d'état du fonctionnement de l'éclairage
  1870.         LastEtatEclairage = !EtatEclairage;                                                                                     // Inverse l'indicateur du dernier état du fonctionnement de l'éclairage
  1871.         digitalWrite(BrocheLedJauneTemoinEclairage, EtatEclairage);                                                             // Active la led témoin de fonctionnement de l'éclairage
  1872.         digitalWrite(BrocheRelaisEclairage, EtatEclairage);
  1873.         digitalWrite(BrocheRelaisEclairageChauffant, EtatEclairage);
  1874.         digitalWrite(BrocheRelaisVentilationBoitier, EtatEclairage);                                                            // Active le relais de l'éclairage
  1875.         if (ModeEco) // ....................................................................................................... // Si l'indicateur du mode Eco est activé
  1876.         {
  1877.           EcranTFTOFF = false;                                                                                                  // Désactive l'indicateur de l'état de l'écran TFT
  1878.           PageCourante = 0;                                                                                                     // Sélectionne la Page 0 => Page principale
  1879.           LastPageCourante = -1;                                                                                                // Sélectionne la Page -1 => Page inexistante
  1880.           etatReactivationAffichagePages = false;                                                                               // Désactive l'indicateur de réactivation d'affichage des Pages
  1881.           TempoReactivationAffichagePages = 2000ul;                                                                             // Définit la durée avant la réactivation d'affichage des Pages
  1882.           t1DebutTempoReactivationAffichagePages = millis();                                                                    // Démarre la temporisation avant la réactivation d'affichage des Pages
  1883.         }
  1884.       }
  1885.       else if (Hrs == HrsArretProgHoraireEclairage && Mins == MinsArretProgHoraireEclairage && Secs <= 2) // ------------------ // Si l'heure courante est égale à l'heure de d'arrêt du programmateur horaire de l'éclairage
  1886.       {
  1887.         EtatEclairage = LOW;                                                                                                    // Désactive l'indicateur d'état du fonctionnement de l'éclairage
  1888.         LastEtatEclairage = !EtatEclairage;                                                                                     // Inverse l'indicateur du dernier état du fonctionnement de l'éclairage
  1889.         digitalWrite(BrocheLedJauneTemoinEclairage, EtatEclairage);                                                             // Désactive la led témoin de fonctionnement de l'éclairage
  1890.         digitalWrite(BrocheRelaisEclairage, EtatEclairage);
  1891.         digitalWrite(BrocheRelaisEclairageChauffant, EtatEclairage);
  1892.         digitalWrite(BrocheRelaisVentilationBoitier, EtatEclairage);                                                             // Désactive le relais de l'éclairage
  1893.         if (ModeEco) // ....................................................................................................... // Si l'indicateur du mode Eco est activé
  1894.         {
  1895.           if (etatReactivationAffichagePages) {FonctionPageAffichageModeEcoActive();}                                           // Si l'indicateur de réactivation d'affichage des Pages est activé => Appelle la fonction d'affichage de la Page mode eco
  1896.           EcranTFTOFF = true;                                                                                                   // Désactive l'indicateur de l'état de l'écran TFT
  1897.           PageCourante = -1;                                                                                                    // Sélectionne la Page -1 => Page inexistante
  1898.         }
  1899.       }
  1900.     }
  1901.   }
  1902.  
  1903. //**************************************************************************************************************************************************************************
  1904.   if (ModeProgHoraireRepas) // ************************************************************************************************ // Si l'indicateur du mode de fonctionnement du programmateur horaire des repas est activé
  1905.   {
  1906.     //Serial.println(IterationProgHoraireRepas[JourSemaine]); // Débug
  1907.     if (IterationProgHoraireRepas[JourSemaine] == 1) // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'itération du programmateur horaire des repas du jour de la semaine courant est activé
  1908.     {
  1909.       if (Hrs == HrsDepart1ProgHoraireRepas && Mins == MinsDepart1ProgHoraireRepas && Secs <= 2) // --------------------------- // Si l'heure courante est égale à l'heure de départ du programmateur horaire des repas
  1910.       {
  1911.         PageCourante = 500;                                                                                                     // Sélectionne la Page 500 => Page mélodie repas
  1912.         FonctionReinitialisationVariablesAffichage();                                                                           // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1913.         FonctionMelodieRepas(1);                                                                                                // Appelle la fonction mélodie repas 1
  1914.       }
  1915.       else if (Hrs == HrsDepart2ProgHoraireRepas && Mins == MinsDepart2ProgHoraireRepas && Secs <= 2) // ---------------------- // Si l'heure courante est égale à l'heure de d'arrêt du programmateur horaire des repas
  1916.       {
  1917.         PageCourante = 500;                                                                                                     // Sélectionne la Page 500 => Page mélodie repas
  1918.         FonctionReinitialisationVariablesAffichage();                                                                           // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  1919.         FonctionMelodieRepas(2);                                                                                                // Appelle la fonction mélodie repas 2
  1920.       }
  1921.     }
  1922.   }
  1923.  
  1924. //**************************************************************************************************************************************************************************
  1925.   if (t1DebutTempoReactivationAffichagePages != 0) // ************************************************************************* // Si la temporisation avant la réactivation d'affichage des Pages a démarré
  1926.   {
  1927.     if (millis() - t1DebutTempoReactivationAffichagePages >= TempoReactivationAffichagePages) // ++++++++++++++++++++++++++++++ // Si la temporisation avant la réactivation d'affichage des Pages est écoulée
  1928.     {
  1929.       t1DebutTempoReactivationAffichagePages = 0;                                                                               // Réinitialise la temporisation avant la réactivation d'affichage des Pages
  1930.       etatReactivationAffichagePages = true;                                                                                    // Active l'indicateur de réactivation d'affichage des Pages
  1931.      
  1932.       if (ModeEco && EcranTFTOFF) // ------------------------------------------------------------------------------------------ // Si l'indicateur du mode Eco est activé et Si l'indicateur de l'état de l'écran TFT est activé
  1933.       {
  1934.         tft.fillScreen(BLACK);                                                                                                  // Initialise la couleur du fond d'écran
  1935.       }
  1936.     }
  1937.   }
  1938.  
  1939. //**************************************************************************************************************************************************************************
  1940.   if (t1DebutTempoSortieAutoMenus != 0) // ************************************************************************************ // Si la temporisation de sortie automatique des menus a démarré
  1941.   {
  1942.     if (millis() - t1DebutTempoSortieAutoMenus >= TempoSortieAutoMenus) // ++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la temporisation de sortie automatique des menus est écouléé
  1943.     {
  1944.       if (EcranTFTONTemporaire) // -------------------------------------------------------------------------------------------- // Si l'indicateur temporaire ON de l'écran TFT est activé
  1945.       {
  1946.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  1947.         EcranTFTONTemporaire = false;                                                                                           // Désactive l'indicateur temporaire ON de l'écran TFT
  1948.         if (etatReactivationAffichagePages) {FonctionPageAffichageModeEcoActive();}                                             // Si l'indicateur de réactivation d'affichage des Pages est activé => Appelle la fonction d'affichage de la Page mode eco
  1949.         EcranTFTOFF = true;                                                                                                     // Désactive l'indicateur de l'état de l'écran TFT
  1950.         PageCourante = -1;                                                                                                      // Sélectionne la Page -1 => Page inexistante
  1951.       }
  1952.       else
  1953.       {
  1954.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  1955.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  1956.         LastPageCourante = -1;                                                                                                  // Réinitialise la dernière Page courante
  1957.       }
  1958.      
  1959.       t1DebutTempoSortieAutoMenus = 0;                                                                                          // Réinitialise la temporisation de sortie automatique des menus
  1960.     }
  1961.   }
  1962.  
  1963. //**************************************************************************************************************************************************************************
  1964. }
  1965.  
  1966. //**************************************************************************************************************************************************************************
  1967. //*** Fonction de la lecture de l'heure et de la date dans le module RTC PCF8523 *******************************************************************************************
  1968. //**************************************************************************************************************************************************************************
  1969. void FonctionLecturePCF8523 ()
  1970. {
  1971.   DateTime now = rtc.now();                                                                                                     // Lit l'heure et la date dans le module RTC PCF8523
  1972.   Hrs = now.hour(); Mins = now.minute(); Secs = now.second();                                                                   // Récupère les heures, les minutes et les secondes courantes
  1973.   JourSemaine = now.dayOfTheWeek(); Jour = now.day(); Mois = now.month(); Annee = now.year();                                   // Récupère la date courante
  1974.   //Serial.print(Hrs); Serial.print(':'); Serial.print(Mins); Serial.print(':'); Serial.println(Secs); // Débug
  1975.   //Serial.print(JourSemaine); Serial.print(' '); Serial.print(Jour); Serial.print('/'); Serial.print(Mois); Serial.print('/'); Serial.println(Annee); // Débug
  1976. }
  1977.  
  1978. //**************************************************************************************************************************************************************************
  1979. //*** Fonction de la lecture de la température et du taux d'humidité dans le module BME280 *********************************************************************************
  1980. //**************************************************************************************************************************************************************************
  1981. void FonctionLecturebme280 ()
  1982. {
  1983.   TemperatureCourante = bme.readTemperature();                                                                                  // Lit la température courante dans le module BME280
  1984.   TauxHumiditeCourant = bme.readHumidity();                                                                                     // Lit le taux d'humidité courant dans le module BME280
  1985.   //Serial.print("Temperature = "); Serial.print(TemperatureCourante, 1); Serial.println(" C"); // Débug
  1986.   //Serial.print("Humidite = "); Serial.print(TauxHumiditeCourant); Serial.println(" %"); // Débug
  1987.  
  1988.   if (ModeDemo) // ************************************************************************************************************ // Si le mode démo est activé
  1989.   {
  1990.     static float TemperatureCouranteModeDemo = TemperatureCourante;                                                             // Déclare la température courante du mode démo
  1991.     static float TauxHumiditeCourantModeDemo = TauxHumiditeCourant;                                                             // Déclare le taux d'humidité courant du mode démo
  1992.    
  1993.     digitalWrite(BrocheLedVerteTemoinModeDemo, HIGH);                                                                           // Active la led verte témoin du mode démo
  1994.    
  1995.     EtatBPPlusTemperatureModeDemo = digitalRead(BrocheBPPlusTemperatureModeDemo);                                               // Lit l'état courant du bouton poussoir "BPPlusTemperatureModeDemo" pour faire varier la température en mode démo
  1996.     if (EtatBPPlusTemperatureModeDemo == LOW) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Pression sur le bouton poussoir "BPPlusTemperatureModeDemo"
  1997.     {
  1998.       TemperatureCouranteModeDemo = TemperatureCouranteModeDemo + 0.5;                                                          // Incrémente la température courante du mode démo
  1999.       if (TemperatureCouranteModeDemo > 80.0) {TemperatureCouranteModeDemo = 80.0;}                                             // Borne la température courante du mode démo
  2000.       delay(50);                                                                                                                // Temporise 50ms
  2001.     }
  2002.     EtatBPMoinsTemperatureModeDemo = digitalRead(BrocheBPMoinsTemperatureModeDemo);                                             // Lit l'état courant du bouton poussoir "BPMoinsTemperatureModeDemo" pour faire varier la température en mode démo
  2003.     if (EtatBPMoinsTemperatureModeDemo == LOW) // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Pression sur le bouton poussoir "BPMoinsTemperatureModeDemo"
  2004.     {
  2005.       TemperatureCouranteModeDemo = TemperatureCouranteModeDemo - 0.5;                                                          // Décrémente la température courante du mode démo
  2006.       if (TemperatureCouranteModeDemo < 0.0) {TemperatureCouranteModeDemo = 0.0;}                                               // Borne la température courante du mode démo
  2007.       delay(50);                                                                                                                // Temporise 50ms
  2008.     }
  2009.     EtatBPPlusHumiditeModeDemo = digitalRead(BrocheBPPlusHumiditeModeDemo);                                                     // Lit l'état courant du bouton poussoir "BPPlusHumiditeModeDemo" pour faire varier le taux d'humidité en mode démo
  2010.     if (EtatBPPlusHumiditeModeDemo == LOW) // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Pression sur le bouton poussoir "BPPlusHumiditeModeDemo"
  2011.     {
  2012.       TauxHumiditeCourantModeDemo = TauxHumiditeCourantModeDemo + 1.0;                                                          // Incrémente le taux d'humidité du mode démo
  2013.       if (TauxHumiditeCourantModeDemo > 100.0) {TauxHumiditeCourantModeDemo = 100.0;}                                           // Borne le taux d'humidité du mode démo
  2014.       delay(50);                                                                                                                // Temporise 50ms
  2015.     }
  2016.     EtatBPMoinsHumiditeModeDemo = digitalRead(BrocheBPMoinsHumiditeModeDemo);                                                   // Lit l'état courant du bouton poussoir "BPMoinsHumiditeModeDemo" pour faire varier le taux d'humidité en mode démo
  2017.     if (EtatBPMoinsHumiditeModeDemo == LOW) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Pression sur le bouton poussoir "BPMoinsHumiditeModeDemo"
  2018.     {
  2019.       TauxHumiditeCourantModeDemo = TauxHumiditeCourantModeDemo - 1.0;                                                          // Décrémente le taux d'humidité du mode démo
  2020.       if (TauxHumiditeCourantModeDemo < 0.0) {TauxHumiditeCourantModeDemo = 0.0;}                                               // Borne le taux d'humidité du mode démo
  2021.       delay(50);                                                                                                                // Temporise 50ms
  2022.     }
  2023.    
  2024.     TemperatureCourante = TemperatureCouranteModeDemo;                                                                          // Transfère la temperature courante du mode démo dans la température courante
  2025.     TauxHumiditeCourant = TauxHumiditeCourantModeDemo;                                                                          // Transfère le taux d'humidité du mode démo dans le taux d'humidité courant
  2026.   }
  2027. }
  2028.  
  2029. //**************************************************************************************************************************************************************************
  2030. //*** Fonction gestion Buzzer **********************************************************************************************************************************************
  2031. //**************************************************************************************************************************************************************************
  2032. void Buzzer (int TempsH, int TempsL, int nb)                                                                                    // TempsH => délai buzzer ON, TempsL => délai buzzer OFF, nb => nombre de bips
  2033. {
  2034.   if (ModeMute) {return;}                                                                                                       // Si l'indicateur du mode Mute est activé
  2035.  
  2036.   for (int x = 1; x <= nb; x++) // ******************************************************************************************** // Boucle le nombre de fois voulu passé par l'argument "int nb"
  2037.   {
  2038.     digitalWrite(BrocheBuzzer, HIGH);                                                                                           // Active le buzzer
  2039.     delay (TempsH);                                                                                                             // Temporisation à l'état haut du buzzer pendant la durée passée par l'argument "int TempsH"
  2040.     digitalWrite(BrocheBuzzer, LOW);                                                                                            // Désactive le buzzer
  2041.     delay (TempsL);                                                                                                             // Temporisation à l'état bas du buzzer pendant la durée passée par l'argument "int TempsL"
  2042.   }
  2043. }
  2044.  
  2045. //**************************************************************************************************************************************************************************
  2046. //*** Fonction Lecture Mémoire Programme (Flash) ***************************************************************************************************************************
  2047. //**************************************************************************************************************************************************************************
  2048. void LectureMemoireFlash (const char AdresseMessage[])
  2049. {
  2050.   char CaractereTemporaire = pgm_read_byte(AdresseMessage);                                                                     // Récupère le premier caractère de la chaîne de caractères à afficher
  2051.   char i = 0;                                                                                                                   // Compte le nombre de déplacements
  2052.  
  2053.   while (CaractereTemporaire != '\0') // ************************************************************************************** // Tant que le caractère récupéré est différent du caractère de fin de chaîne de caractères
  2054.   {
  2055.     tft.print(CaractereTemporaire);                                                                                             // Affichage du caractère lu
  2056.     i++;                                                                                                                        // Incrémente le compteur de déplacements
  2057.     CaractereTemporaire = pgm_read_byte(AdresseMessage + i);                                                                    // Récupère le caractère suivant
  2058.   }
  2059. }
  2060.  
  2061. //**************************************************************************************************************************************************************************
  2062. //*** Fonction d'affichage de la température courante **********************************************************************************************************************
  2063. //**************************************************************************************************************************************************************************
  2064. void FonctionAffichageTemperatureCourante ()
  2065. {
  2066.   tft.setTextColor(WHITE, BLACK);                                                                                               // Définit la couleur
  2067.   tft.setTextSize(4);                                                                                                           // Définit la taile
  2068.   if (TemperatureCourante >= 10) {tft.setCursor(40, 160); tft.print(TemperatureCourante, 1);} // ******************************* // Positionne et Affiche la température courante
  2069.   else if (TemperatureCourante >= 0 && TemperatureCourante < 10) {tft.setCursor(40, 160); tft.print(' '); tft.print(TemperatureCourante, 1);}
  2070.   tft.setTextSize(2); tft.print((char)247);                                                                                     // Affiche le symbole degré
  2071.   tft.setTextSize(4);                                                                                                           // Définit la taile
  2072.   tft.print('C');                                                                                                               // Affiche le caractère "C"
  2073. }
  2074.  
  2075. //**************************************************************************************************************************************************************************
  2076. //*** Fonction d'affichage du taux d'humidité courant **********************************************************************************************************************
  2077. //**************************************************************************************************************************************************************************
  2078. void FonctionAffichageTauxHumiditeCourant ()
  2079. {
  2080.   tft.setTextColor(WHITE, BLACK);                                                                                               // Définit la couleur
  2081.   tft.setTextSize(4);                                                                                                           // Définit la taile
  2082.   if (TauxHumiditeCourant >= 10) {tft.setCursor(310, 160); tft.print(TauxHumiditeCourant, 1);} // ****************************** // Positionne et Affiche le taux d'humidité courant
  2083.   else if (TauxHumiditeCourant >= 0 && TauxHumiditeCourant < 10) {tft.setCursor(310, 160); tft.print(' '); tft.print(TauxHumiditeCourant, 1);}
  2084.   tft.print('%');                                                                                                               // Affiche le caractère "%"
  2085. }
  2086.  
  2087. //**************************************************************************************************************************************************************************
  2088. //*** Fonction d'affichage des icônes des pages de réglages ****************************************************************************************************************
  2089. //**************************************************************************************************************************************************************************
  2090. void FonctionAffichageIconesPagesReglages ()
  2091. {
  2092.   tft.setTextSize(2);                                                                                                           // Définit la taille du le texte
  2093.  
  2094.   if (PageCourante == 100 || PageCourante == 101 || PageCourante == 102 || PageCourante == 103 || PageCourante == 104 // ****** // Si la Page sélectionnée est 100 ou 101 ou 102 ou 103 ou 104
  2095.    || PageCourante == 105)
  2096.   {
  2097.     tft.setTextColor(BLACK, WHITE);                                                                                             // Définit le couleur
  2098.     tft.fillCircle(10, 140, 20, WHITE);                                                                                         // Dessine le bouton "<"
  2099.     tft.drawCircle(10, 140, 22, WHITE);
  2100.     tft.setCursor(6, 135); tft.print('<');                                                                                      // Positionne et Affiche "<"
  2101.     tft.fillCircle(460, 140, 20, WHITE);                                                                                        // Dessine le bouton ">"
  2102.     tft.drawCircle(460, 140, 22, WHITE);
  2103.     tft.setCursor(464, 135); tft.print('>');                                                                                      // Positionne et Affiche ">"
  2104.   }
  2105.  
  2106.   if (PageCourante == 100 || PageCourante == 101 || PageCourante == 103 || PageCourante == 104) // **************************** // Si la Page sélectionnée est 100 ou 101 ou 103 ou 104
  2107.   {
  2108.     tft.fillCircle(20, 300, 20, WHITE);                                                                                         // Dessine la touche
  2109.     tft.drawCircle(20, 300, 22, WHITE);
  2110.     tft.drawLine(17, 305, 22, 293, BLACK);                                                                                       // Affiche la Touche "Haut"
  2111.     tft.drawLine(27, 305, 22, 293, BLACK);
  2112.     tft.fillCircle(460, 300, 20, WHITE);                                                                                        // Dessine la touche
  2113.     tft.drawCircle(460, 300, 22, WHITE);
  2114.     tft.drawLine(455, 293, 460, 305, BLACK);                                                                               // Affiche la Touche "Bas"
  2115.     tft.drawLine(465, 293, 460, 305, BLACK);
  2116.   }
  2117.  
  2118.   if (PageCourante == 200 || PageCourante == 201 || PageCourante == 203 || PageCourante == 204) // **************************** // Si la Page sélectionnée est 200 ou 201 ou 203 ou 204
  2119.   {
  2120.     tft.fillCircle(20, 300, 20, WHITE);                                                                                         // Dessine la touche
  2121.     tft.drawCircle(20, 300, 22, WHITE);
  2122.     tft.drawLine(17, 305, 22, 293, BLACK);                                                                                       // Affiche la Touche "Haut"
  2123.     tft.drawLine(27, 305, 22, 293, BLACK);
  2124.     tft.fillCircle(460, 300, 20, WHITE);                                                                                        // Dessine la touche
  2125.     tft.drawCircle(460, 300, 22, WHITE);
  2126.    tft.drawLine(455, 293, 460, 305, BLACK);                                                                               // Affiche la Touche "Bas"
  2127.     tft.drawLine(465, 293, 460, 305, BLACK);
  2128.    
  2129.   }
  2130.  
  2131.   if (PageCourante == 200 || PageCourante == 201 || PageCourante == 102 || PageCourante == 203 || PageCourante == 204  // ***** // Si la Page sélectionnée est 200 ou 201 ou 102 ou 203 ou 104 ou 501 ou 502 ou 204
  2132.    || PageCourante == 501 || PageCourante == 502)
  2133.   {
  2134.     tft.setTextColor(BLACK, WHITE);                                                                                             // Définit la couleur
  2135.     tft.fillCircle(22, 214, 20, WHITE);                                                                                         // Dessine le bouton "OK"
  2136.     tft.drawCircle(22, 214, 22, WHITE);
  2137.     tft.setCursor(12, 208); LectureMemoireFlash(message41);                                                                     // Posiitionne et Affiche "OK"
  2138.     tft.fillCircle(460, 214, 20, WHITE);                                                                                        // Dessine le bouton "X"
  2139.     tft.drawCircle(460, 214, 22, WHITE);
  2140.     tft.setCursor(455, 208); tft.print('X');                                                                                    // Positionne et Affiche "X"
  2141.   }
  2142.  
  2143.   tft.setTextColor(WHITE);                                                                                                      // Définit la couleur
  2144.   tft.fillRoundRect(460, 0, 20, 20, 2, RED);                                                                                    // Dessine le bouton "X" sur la barre des titres pour sortir d'une Page vers la Page 0
  2145.   tft.setCursor(464, 2); tft.print('X');                                                                                        // Positionne et Affiche "X"
  2146. }                                                                                      // Positionne et Affiche "X"
  2147.  
  2148.  
  2149. //**************************************************************************************************************************************************************************
  2150. //*** Fonction de réinitialisation des variable pour forcer l'affichage des Pages ******************************************************************************************
  2151. //**************************************************************************************************************************************************************************
  2152. void FonctionReinitialisationVariablesAffichage ()
  2153. {
  2154.   if (PageCourante == 0) // *************************************************************************************************** // Si la Page courante 0 est sélectionnée => Page principale
  2155.   {
  2156.     LastMins = -1;                                                                                                              // Réinitialise la dernière minute courante
  2157.     LastJour = -1;                                                                                                              // Réinitialise le dernier jour du mois courant
  2158.     LastTemperatureCourante = -100.0;                                                                                           // Réinitialise la dernière température courante
  2159.     LastTauxHumiditeCourant = -1.0;                                                                                             // Réinitialise le dernier taux d'humidité courant
  2160.     LastSeuilTemperatureJour = -100.0;                                                                                          // Réinitialise le dernier seuil de jour de la température
  2161.     LastSeuilTemperatureNuit = -100.0;                                                                                          // Réinitialise le dernier seuil de nuit de la température
  2162.     LastSeuilHumiditeJour = -1.0;                                                                                               // Réinitialise le dernier seuil de jour du taux d'humidité
  2163.     LastSeuilHumiditeNuit = -1.0;                                                                                               // Réinitialise le dernier seuil de nuit du taux d'humidité
  2164.     LastEtatVentilateur = !EtatVentilateur;                                                                                     // Réinitialise l'indicateur du dernier état du fonctionnement du ventilateur
  2165.     LastEtatBrumisateur = !EtatBrumisateur;                                                                                     // Réinitialise l'indicateur du dernier état du fonctionnement du brumisateur
  2166.     LastEtatEclairage = !EtatEclairage;                                                                                         // Réinitialise l'indicateur du dernier état du fonctionnement de l'aiclairage
  2167.     LastModeJourSeuilTemperature = -1;                                                                                          // Réinitialise le dernier indicateur du mode jour pour les seuils de la température
  2168.     LastModeJourSeuilHumidite = -1;                                                                                             // Réinitialise le dernier indicateur du mode jour pour les seuils du taux d'humidité
  2169.     tempoPression = 0;                                                                                                          // Réinitialise la temporisation entre deux pressions sur l'écran tactile TFT
  2170.     if (!EcranTFTONTemporaire) {t1DebutTempoSortieAutoMenus = 0;}                                                               // Réinitialise la temporisation de sortie automatique des menus
  2171.   }
  2172.   else if (PageCourante == 100) // ******************************************************************************************** // Si la Page courante 100 est sélectionnée => Page réglage du seuil de jour de la température
  2173.   {
  2174.     LastSeuilTemperatureJourReglage = -100.0;                                                                                   // Réinitialise le dernier seuil de jour de réglage de la température
  2175.     LastModeManuelTemperatureReglage = -1;                                                                                      // Réinitialise le dernier indicateur de réglage du mode manuel de la température
  2176.   }
  2177.   else if (PageCourante == 200) // ******************************************************************************************** // Si la Page courante 200 est sélectionnée => Page réglage du seuil de nuit de la température
  2178.   {
  2179.     LastSeuilTemperatureNuitReglage = -100.0;                                                                                   // Réinitialise le dernier seuil de nuit de réglage de la température
  2180.     LastModeManuelTemperatureReglage = -1;                                                                                      // Réinitialise le dernier indicateur de réglage du mode manuel de la température
  2181.   }
  2182.   else if (PageCourante == 101) // ******************************************************************************************** // Si la Page courante 101 est sélectionnée => Page réglage du seuil de jour du taux d'humidité
  2183.   {
  2184.     LastSeuilHumiditeJourReglage = -1.0;                                                                                        // Réinitialise le dernier seuil de jour de réglage du taux d'humidité
  2185.     LastModeManuelHumiditeReglage = -1;                                                                                         // Réinitialise le dernier indicateur de réglage du mode manuel du taux d'humidité
  2186.   }
  2187.   else if (PageCourante == 201) // ******************************************************************************************** // Si la Page courante 201 est sélectionnée => Page réglage du seuil de nuit du taux d'humidité
  2188.   {
  2189.     LastSeuilHumiditeNuitReglage = -1.0;                                                                                        // Réinitialise le dernier seuil de jour de réglage du taux d'humidité
  2190.     LastModeManuelHumiditeReglage = -1;                                                                                         // Réinitialise le dernier indicateur de réglage du mode manuel du taux d'humidité
  2191.   }
  2192.   else if (PageCourante == 102) // ******************************************************************************************** // Si la Page courante 102 est sélectionnée => Page réglage des heures de départ jour et de départ nuit pour activer les seuils en fonction du mode jour/nuit
  2193.   {
  2194.     LastHrsDepartSeuilsModeJourReglage = -1;                                                                                    // Réinitialise les dernières heures départ de réglage seuils mode jour
  2195.     LastMinsDepartSeuilsModeJourReglage = -1;                                                                                   // Réinitialise les dernières minutes départ de réglage seuils mode jour
  2196.     LastHrsDepartSeuilsModeNuitReglage = -1;                                                                                    // Réinitialise les dernières heures départ de réglage seuils mode nuit
  2197.     LastMinsDepartSeuilsModeNuitReglage = -1;                                                                                   // Réinitialise les dernières minutes départ de réglage seuils mode nuit
  2198.     LastMins = -1;                                                                                                              // Réinitialise les dernières minutes courante
  2199.   }
  2200.   else if (PageCourante == 103) // ******************************************************************************************** // Si la Page courante 103 est sélectionnée => Page réglage du programmateur d'éclairage
  2201.   {
  2202.     LastHrsDepartProgHoraireEclairageReglage = -1;                                                                              // Réinitialise les dernière heures de départ de réglage du programmateur horaire de l'éclairage
  2203.     LastMinsDepartProgHoraireEclairageReglage = -1;                                                                             // Réinitialise les dernières minutes de départ de réglage du programmateur horaire de l'éclairage
  2204.     LastHrsArretProgHoraireEclairageReglage = -1;                                                                               // Réinitialise les dernières heures d'arrêt de réglage du programmateur horaire de l'éclairage
  2205.     LastMinsArretProgHoraireEclairageReglage = -1;                                                                              // Réinitialise les dernières minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  2206.     LastModeProgHoraireEclairageReglage = -1;                                                                                   // Réinitialise le dernier indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage
  2207.     for (int i = 0; i < 7; i++)                                                                                                 // Réinitialise la dernière itération de réglage du mode du programmateur horaire de l'éclairage
  2208.     {
  2209.       LastIterationProgHoraireEclairageReglage[i] = !IterationProgHoraireEclairageReglage[i];
  2210.     }
  2211.     tempoPression = 0;                                                                                                          // Réinitialise la temporisation entre deux pressions sur l'écran tactile TFT
  2212.   }
  2213.   else if (PageCourante == 203) // ******************************************************************************************** // Si la Page courante 203 est sélectionnée => Page réglage du programmateur horaire d'éclairage
  2214.   {
  2215.     LastHrsDepartProgHoraireEclairageReglage = -1;                                                                              // Réinitialise les dernière heures de départ de réglage du programmateur horaire de l'éclairage
  2216.     LastMinsDepartProgHoraireEclairageReglage = -1;                                                                             // Réinitialise les dernières minutes de départ de réglage du programmateur horaire de l'éclairage
  2217.     LastHrsArretProgHoraireEclairageReglage = -1;                                                                               // Réinitialise les dernières heures d'arrêt de réglage du programmateur horaire de l'éclairage
  2218.     LastMinsArretProgHoraireEclairageReglage = -1;                                                                              // Réinitialise les dernières minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  2219.     LastMins = -1;                                                                                                              // Réinitialise les dernières minutes courante
  2220.   }
  2221.   else if (PageCourante == 104) // ******************************************************************************************** // Si la Page courante 104 est sélectionnée => Page réglage du programmateur horaire des repas
  2222.   {
  2223.     LastHrsDepart1ProgHoraireRepasReglage = -1;                                                                                 // Réinitialise les dernières heures de départ1 de réglage du programmateur horaire des repas
  2224.     LastMinsDepart1ProgHoraireRepasReglage = -1;                                                                                // Réinitialise les dernières minutes de départ1 de réglage du programmateur horaire des repas
  2225.     LastHrsDepart2ProgHoraireRepasReglage = -1;                                                                                 // Réinitialise les dernières heures de départ2 de réglage du programmateur horaire des repas
  2226.     LastMinsDepart2ProgHoraireRepasReglage = -1;                                                                                // Réinitialise les dernières minutes de départ2 de réglage du programmateur horaire des repas
  2227.     LastMins = -1;                                                                                                              // Réinitialise les dernières minutes courante
  2228.   }
  2229.   else if (PageCourante == 204) // ******************************************************************************************** // Si la Page courante 204 est sélectionnée => Page réglage du programmateur horaire des repas
  2230.   {
  2231.     LastModeProgHoraireRepasReglage = -1;                                                                                       // Réinitialise le dernier indicateur de réglage du mode de fonctionnement du programmateur horaire repas
  2232.     for (int i = 0; i < 7; i++)                                                                                                 // Réinitialise la dernière itération de réglage du mode du programmateur horaire repas
  2233.     {
  2234.       LastIterationProgHoraireRepasReglage[i] = !IterationProgHoraireRepasReglage[i];
  2235.     }
  2236.     tempoPression = 0;                                                                                                          // Réinitialise la temporisation entre deux pressions sur l'écran tactile TFT
  2237.   }
  2238.   else if (PageCourante == 500) // ******************************************************************************************** // Si la Page courante 500 est sélectionnée => Page mélodie repas
  2239.   {
  2240.     LastPageCourante = -1;                                                                                                      // Réinitialise la dernière Page courante
  2241.   }
  2242.   else if (PageCourante == 501) // ******************************************************************************************** // Si la Page courante 501 est sélectionnée => Réglage de l'heure courante
  2243.   {
  2244.     LastHrsReglage = -1;                                                                                                        // Réinitialise les dernières heures de réglage
  2245.     LastMinsReglage = -1;                                                                                                       // Réinitialise les dernières minutes de réglage
  2246.   }
  2247.   else if (PageCourante == 502) // ******************************************************************************************** // Si la Page courante 502 est sélectionnée => Réglage de la date courante
  2248.   {
  2249.     LastJourSemaine = -1;                                                                                                       // Réinitialise le dernier jour de la semaine
  2250.     LastJourReglage = -1;                                                                                                       // Réinitialise le dernier jour de réglage
  2251.     LastMoisReglage = -1;                                                                                                       // Réinitialise le dernier Mois de réglage
  2252.     LastAnneeReglage = -1;                                                                                                      // Réinitialise la dernière année de réglage
  2253.     tempoPression = 0;                                                                                                          // Réinitialise la temporisation entre deux pressions sur l'écran tactile TFT
  2254.   }
  2255.   else if (PageCourante == 105) // ******************************************************************************************** // Si la Page courante 105 est sélectionnée => Menu setup
  2256.   {
  2257.     LastetatBoutonReglagesDefaut = !etatBoutonReglagesDefaut;                                                                   // Réinitialise le dernier l'état du bouton "REGLAGES PAR DEFAUT"
  2258.     LastetatBoutonReglagesModeEco = -1;                                                                                         // Réinitialise le dernier du bouton "MODE ECO ON/OFF"
  2259.     LastetatBoutonReglagesModeMute = -1;                                                                                        // Réinitialise le dernier état du bouton "MODE MUTE ON/OFF"
  2260.     LastPageCourante = -1;                                                                                                      // Réinitialise la dernière Page courante
  2261.     tempoPression = 0;                                                                                                          // Réinitialise la temporisation entre deux pressions sur l'écran tactile TFT
  2262.   }
  2263. }
  2264.  
  2265. //**************************************************************************************************************************************************************************
  2266. //*** Fonction Gestion Tactile de l'écran TFT ******************************************************************************************************************************
  2267. //**************************************************************************************************************************************************************************
  2268. void GestionTactile ()
  2269. {
  2270.   uint16_t xpos, ypos;                                                                                                          // Coordonnées de l'écran TFT
  2271.  
  2272.   tp = ts.getPoint();                                                                                                           // Lit les coordonnées de pression sur l'écran TFT
  2273.  
  2274.   pinMode(XM, OUTPUT);                                                                                                          // Reconfigure les broches en sorties pour la fonction tactile
  2275.   pinMode(YP, OUTPUT);
  2276.   pinMode(XP, OUTPUT);
  2277.   pinMode(YM, OUTPUT);
  2278.  
  2279.   //Serial.print(tp.y); Serial.print(' ');
  2280.   //Serial.print(tp.x); Serial.print(' '); Serial.println(tp.z);
  2281.  
  2282.   if (tp.z > PressionMin && tp.z < PressionMax) // **************************************************************************** // Si le niveau de pression sur l'écran tactile est correct
  2283.   {
  2284.     xpos = map(tp.y, TS_LEFT, TS_RT, tft.width(), 0);                                                                           // Convertit les coordonnées annalogiques tp.x et tp.y
  2285.     ypos = map(tp.x, TS_TOP, TS_BOT, tft.height(), 0);
  2286.    
  2287.     Serial.print(xpos); Serial.print(' '); Serial.println(ypos); // Débug
  2288.    
  2289. //**************************************************************************************************************************************************************************    
  2290.     if (ModeEco && EcranTFTOFF) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si l'indicateur du mode Eco est activé et Si l'indicateur de l'état de l'écran TFT est activé
  2291.     {
  2292.       if (xpos > 0 && xpos < 440 && ypos > 9 && ypos < 246) // ---------------------------------------------------------------- // Pression sur l'écran TFT
  2293.       {
  2294.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2295.         EcranTFTONTemporaire = true;                                                                                            // Active l'indicateur temporaire ON de l'écran TFT
  2296.         EcranTFTOFF = false;                                                                                                    // Désactive l'indicateur de l'état de l'écran TFT
  2297.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2298.         LastPageCourante = -1;                                                                                                  // Sélectionne la Page -1 => Page inexistante
  2299.         etatReactivationAffichagePages = true;                                                                                  // Active l'indicateur de réactivation d'affichage des Pages
  2300.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2301.       }
  2302.     }
  2303. //**************************************************************************************************************************************************************************
  2304.     else if (PageCourante == 0) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 0 est sélectionnée => Page Principale
  2305.     {
  2306.       if (millis() - tempoPression >= 1000ul && tempoPression != 0 || tempoPression == 0) // ---------------------------------- // Si la temporisation entre deux pressions est écoulée ou Si elle est égale à 0
  2307.       {
  2308.    if (xpos > 370 && xpos < 480 && ypos > 10 && ypos < 20) // ............................................................ // Pression sur le bouton "VENTILATEUR"
  2309.         {
  2310.           if (ModeManuelTemperature)                                                                                            // Si l'indicateur du mode manuel de la température est activé
  2311.           {
  2312.             Buzzer(3, 0, 1);                                                                                                    // Active le buzzer 3ms
  2313.             EtatVentilateur = !EtatVentilateur;                                                                                 // Inverse l'indicateur d'état du fonctionnement du ventilateur
  2314.             LastEtatVentilateur = !EtatVentilateur;                                                                             // Inverse l'indicateur du dernier état du fonctionnement du ventilateur
  2315.             digitalWrite(BrocheLedRougeTemoinVentilateur, EtatVentilateur);                                                     // Active ou désactive la led témoin de fonctionnement du ventilateur
  2316.             digitalWrite(BrocheRelaisVentilateur, EtatVentilateur);                                                             // Active ou désactive le relais du ventilateur
  2317.           }
  2318.         }
  2319.         else if (xpos > 225 && xpos < 302 && ypos > 8 && ypos < 20) // ..................................................... // Pression sur le bouton "BRUMISATEUR"
  2320.         {
  2321.           if (ModeManuelHumidite)                                                                                               // Si l'indicateur du mode manuel du taux d'humidité est activé
  2322.           {
  2323.             Buzzer(3, 0, 1);                                                                                                    // Active le buzzer 3ms
  2324.             EtatBrumisateur = !EtatBrumisateur;                                                                                 // Active l'indicateur d'état du fonctionnement du brumisateur
  2325.             LastEtatBrumisateur = !EtatBrumisateur;                                                                             // Inverse l'indicateur du dernier état du fonctionnement du brumisateur
  2326.             digitalWrite(BrocheLedVerteTemoinBrumisateur, EtatBrumisateur);                                                     // Active ou désactive la led témoin de fonctionnement du brumisateur
  2327.             digitalWrite(BrocheRelaisBrumisateur, EtatBrumisateur);                                                             // Active ou désactive le relais du brumisateur
  2328.           }
  2329.         }
  2330.         else if (xpos > 25 && xpos < 60 && ypos > 4 && ypos < 22) // ..................................................... // Pression sur le bouton "NEONS"
  2331.         {
  2332.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2333.           EtatEclairage = !EtatEclairage;                                                                                       // Inverse l'indicateur d'état du fonctionnement de l'éclairage
  2334.           LastEtatEclairage = !EtatEclairage;                                                                                   // Inverse l'indicateur du dernier état du fonctionnement de l'éclairage
  2335.           digitalWrite(BrocheLedJauneTemoinEclairage, EtatEclairage);                                                           // Active ou désactive la led témoin de fonctionnement de l'éclairage
  2336.           digitalWrite(BrocheRelaisEclairage, EtatEclairage);
  2337.           digitalWrite(BrocheRelaisEclairageChauffant, EtatEclairage);                                                          // Active ou désactive le relais de l'éclairage
  2338.        
  2339.         }
  2340.         else if (xpos > 37 && xpos < 56 && ypos > 299 && ypos < 310) // ....................................................... // Pression sur le bouton "MENUS"
  2341.         {
  2342.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2343.           PageCourante = 100;                                                                                                   // Sélectionne la Page 100 => Réglage du seuil de jour de la température
  2344.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2345.         }
  2346.         else if (xpos > 280 && xpos < 470 && ypos > 210 && ypos < 250) // ......................................................... // Pression sur l'heure courante
  2347.         {
  2348.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2349.           PageCourante = 501;                                                                                                   // Sélectionne la Page 501 => Réglage de l'heure courante
  2350.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2351.         }
  2352.         else if (xpos > 20 && xpos < 260 && ypos > 210 && ypos < 250) // ....................................................... // Pression sur la date courante
  2353.         {
  2354.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2355.           PageCourante = 502;                                                                                                   // Sélectionne la Page 502 => Réglage de la date courante
  2356.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2357.         }
  2358.        
  2359.         tempoPression = millis();                                                                                               // (Dé)Redémarre la temporisation entre deux pressions
  2360.       }
  2361.     }
  2362. //**************************************************************************************************************************************************************************
  2363.     else if (PageCourante == 100) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 100 est sélectionnée => Page réglage du seuil de jour de la température
  2364.     {
  2365.     if (xpos > 395 && xpos < 402 && ypos > 140 && ypos < 158) // -------------------------------------------------------------- // Pression sur l'icone "-"
  2366.       {
  2367.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2368.         SeuilTemperatureJourReglage = SeuilTemperatureJourReglage - 0.5;                                                        // Modifie le seuil de jour de réglage de la température
  2369.         if (SeuilTemperatureJourReglage <= SeuilMinTemperatureJourReglage) // ................................................. // Si le seuil de jour de réglage de la température est inférieur ou égale au le seuil de jour min de réglage de la température
  2370.         {
  2371.           SeuilTemperatureJourReglage = SeuilMinTemperatureJourReglage;                                                         // Borne le seuil de jour de réglage de la température
  2372.         }
  2373.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2374.       }
  2375.       else if (xpos > 50 && xpos < 60 && ypos > 140 && ypos < 150) // ------------------------------------------------------- // Pression sur l'icone "+"
  2376.       {
  2377.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2378.         SeuilTemperatureJourReglage = SeuilTemperatureJourReglage + 0.5;                                                        // Modifie le seuil de jour de réglage de la température
  2379.         if (SeuilTemperatureJourReglage >= SeuilMaxTemperatureJourReglage) // ................................................. // Si le seuil de jour de réglage de la température est supérieur ou égale au le seuil de jour max de réglage de la température
  2380.         {
  2381.           SeuilTemperatureJourReglage = SeuilMaxTemperatureJourReglage;                                                         // Borne le seuil de jour de réglage de la température
  2382.         }
  2383.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2384.       }
  2385.       else if (xpos > 63 && xpos < 132 && ypos > 0 && ypos < 40) // ------------------------------------------------------- // Pression sur le bouton "OFF"
  2386.       {
  2387.         if (ModeManuelTemperatureReglage) // .................................................................................. // Si l'indicateur de réglage du mode manuel est activé
  2388.         {
  2389.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2390.           ModeManuelTemperatureReglage = false;                                                                                 // Désactive l'indicateur de réglage du mode manuel
  2391.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2392.         }
  2393.       }
  2394.       else if (xpos > 390 && xpos < 420 && ypos > 10 && ypos < 30) // -------------------------------------------------------- // Pression sur le bouton "ON"
  2395.       {
  2396.         if (!ModeManuelTemperatureReglage) // ................................................................................. // Si l'indicateur de réglage du mode manuel est désactivé
  2397.         {
  2398.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2399.           ModeManuelTemperatureReglage = true;                                                                                  // Active l'indicateur de réglage du mode manuel
  2400.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2401.         }
  2402.       }
  2403.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) // ------------------------------------------------------------ // Pression sur le titre de la Page 100 avec l'icône "X"
  2404.       {
  2405.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2406.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2407.       }
  2408.       else if (xpos > 25 && xpos < 35 && ypos > 175 && ypos < 185) // ------------------------------------------------------- // Pression sur le bouton ">"
  2409.       {
  2410.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2411.         PageCourante = 101;                                                                                                     // Sélectionne la Page 101 => Réglage du seuil de jour du taux d'humidité
  2412.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2413.       }
  2414.       else if ((xpos > 465 && xpos < 480)  && ypos > 170 && ypos < 190) // ------------------------------------ // Pression sur le bouton "<"
  2415.       {
  2416.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2417.         PageCourante = 105;                                                                                                     // Sélectionne la Page 105 => Réglage menu setup
  2418.       }
  2419.       else if ((xpos > 460  && xpos < 480) && ypos > 0 && ypos < 20)  // ------------------------------------- // Pression sur le bouton "Haut"
  2420.       {
  2421.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2422.         PageCourante = 200;                                                                                                     // Sélectionne la Page 200 => Réglage du seuil de nuit de la température
  2423.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2424.       }
  2425.       else if (xpos > 0 && xpos < 35 && ypos > 0 && ypos < 35) // ------------------------------------------------------- // Pression sur le bouton "Bas"
  2426.       {
  2427.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2428.         PageCourante = 200;                                                                                                     // Sélectionne la Page 200 => Réglage du seuil de nuit de la température
  2429.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2430.       }
  2431.     }
  2432. //**************************************************************************************************************************************************************************
  2433.     else if (PageCourante == 200) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 200 est sélectionnée => Page réglage du seuil de nuit de la température
  2434.     {
  2435.       if (xpos > 395 && xpos < 402 && ypos > 140 && ypos < 158) // -------------------------------------------------------------- // Pression sur l'icone "-"
  2436.       {
  2437.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2438.         SeuilTemperatureNuitReglage = SeuilTemperatureNuitReglage - 0.5;                                                        // Modifie le seuil de nuit de réglage de la température
  2439.         if (SeuilTemperatureNuitReglage <= SeuilMinTemperatureNuitReglage) // ................................................. // Si le seuil de nuit de réglage de la température est inférieur ou égale au seuil de nuit min de réglage de la température
  2440.         {
  2441.           SeuilTemperatureNuitReglage = SeuilMinTemperatureNuitReglage;                                                         // Borne le seuil de nuit de réglage de la température
  2442.         }
  2443.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2444.       }
  2445.       else if (xpos > 50 && xpos < 60 && ypos > 140 && ypos < 150) // ------------------------------------------------------- // Pression sur l'icone "+"
  2446.       {
  2447.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2448.         SeuilTemperatureNuitReglage = SeuilTemperatureNuitReglage + 0.5;                                                        // Modifie le seuil de nuit de réglage de la température
  2449.         if (SeuilTemperatureNuitReglage >= SeuilMaxTemperatureNuitReglage) // ................................................. // Si le seuil de nuit de réglage de la température est supérieur ou égale au seuil de nuit max de réglage de la température
  2450.         {
  2451.           SeuilTemperatureNuitReglage = SeuilMaxTemperatureNuitReglage;                                                         // Borne le seuil de nuit de réglage de la température
  2452.         }
  2453.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2454.       }
  2455.       else if (xpos > 63 && xpos < 132 && ypos > 0 && ypos < 40) // ------------------------------------------------------- // Pression sur le bouton "OFF"
  2456.       {
  2457.         if (ModeManuelTemperatureReglage) // .................................................................................. // Si l'indicateur de réglage du mode manuel est activé
  2458.         {
  2459.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2460.           ModeManuelTemperatureReglage = false;                                                                                 // Désactive l'indicateur de réglage du mode manuel
  2461.         }
  2462.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2463.       }
  2464.       else if (xpos > 390 && xpos < 420 && ypos > 10 && ypos < 30) // -------------------------------------------------------- // Pression sur le bouton "ON"
  2465.       {
  2466.         if (!ModeManuelTemperatureReglage) // ................................................................................. // Si l'indicateur de réglage du mode manuel est désactivé
  2467.         {
  2468.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2469.           ModeManuelTemperatureReglage = true;                                                                                  // Active l'indicateur de réglage du mode manuel
  2470.         }
  2471.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2472.       }
  2473.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) // ............................................................ // Pression sur le titre de la Page 100 avec l'icône "X"
  2474.       {
  2475.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2476.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2477.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  2478.       }
  2479.       else if ((xpos > 460  && xpos < 480) && ypos > 0 && ypos < 20) // ------------------------------------------------------- // Pression sur le bouton "Haut"
  2480.       {
  2481.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2482.         PageCourante = 100;                                                                                                     // Sélectionne la Page 100 => Réglage du seuil de jour de la température
  2483.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2484.       }
  2485.       else if (xpos > 0 && xpos < 35 && ypos > 0 && ypos < 35) // ------------------------------------- // Pression sur le bouton "Bas"
  2486.       {
  2487.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2488.         PageCourante = 100;                                                                                                     // Sélectionne la Page 100 => Réglage du seuil de jour de la température
  2489.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2490.       }
  2491.       else if (xpos > 20 && xpos < 40 && ypos > 95 && ypos < 110) // ------------------------------------------------------- // Pression sur l'icone "X"
  2492.       {
  2493.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2494.         PageCourante = 100;                                                                                                     // Sélectionne la Page 100 => Réglage du seuil de jour de la température
  2495.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  2496.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2497.       }
  2498.       else if ((xpos > 450 && xpos < 65510) && ypos > 95 && ypos < 110) // ------------------------------------ // Pression sur l'icone "OK"
  2499.       {
  2500.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2501.         SeuilTemperatureJour = SeuilTemperatureJourReglage;                                                                     // Transfère le seuil de jour de réglage de la température dans le seuil de jour de la température
  2502.         SeuilTemperatureNuit = SeuilTemperatureNuitReglage;                                                                     // Transfère le seuil de nuit de réglage de la température dans le seuil de nuit de la température
  2503.         ModeManuelTemperature = ModeManuelTemperatureReglage;                                                                   // Transfère l'indicateur de réglage du mode manuel de la température dans l'indicateur du mode manuel de la température
  2504.         EEPROM.put(0, SeuilTemperatureJour);                                                                                    // Mémorise le seuil de jour de la température
  2505.         EEPROM.put(16, SeuilTemperatureNuit);                                                                                   // Mémorise le seuil de nuit de la température
  2506.         EEPROM.put(8, ModeManuelTemperature);                                                                                   // Mémorise l'indicateur du mode manuel de la température
  2507.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2508.         FonctionPageAffichageValidationReglages();                                                                              // Appelle la fonction d'affichage validation réglages
  2509.       }
  2510.     }
  2511. //**************************************************************************************************************************************************************************
  2512.     else if (PageCourante == 101) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 101 est sélectionnée => Page réglage du seuil de jour du taux d'humidité
  2513.     {
  2514.       if (xpos > 395 && xpos < 402 && ypos > 140 && ypos < 158) // -------------------------------------------------------------- // Pression sur l'icone "-"
  2515.       {
  2516.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2517.         SeuilHumiditeJourReglage = SeuilHumiditeJourReglage - 0.5;                                                              // Modifie le seuil de jour de réglage du taux d'humidité
  2518.         if (SeuilHumiditeJourReglage <= SeuilMinHumiditeJourReglage) // ....................................................... // Si le seuil de jour de réglage du taux d'humidité est inférieur ou égale au le seuil de jour min de réglage du taux d'humidité
  2519.         {
  2520.           SeuilHumiditeJourReglage = SeuilMinHumiditeJourReglage;                                                               // Borne le seuil de jour de réglage du taux d'humidité
  2521.         }
  2522.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2523.       }
  2524.       else if (xpos > 50 && xpos < 60 && ypos > 140 && ypos < 150) // ------------------------------------------------------- // Pression sur l'icone "+"
  2525.       {
  2526.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2527.         SeuilHumiditeJourReglage = SeuilHumiditeJourReglage + 0.5;                                                              // Modifie le seuil de jour de réglage du taux d'humidité
  2528.         if (SeuilHumiditeJourReglage >= SeuilMaxHumiditeJourReglage) // ....................................................... // Si le seuil de jour de réglage du taux d'humidité est supérieur ou égale au le seuil de jour max de réglage du taux d'humidité
  2529.         {
  2530.           SeuilHumiditeJourReglage = SeuilMaxHumiditeJourReglage;                                                               // Borne le seuil de jour de réglage du taux d'humidité
  2531.         }
  2532.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2533.       }
  2534.       else if (xpos > 63 && xpos < 132 && ypos > 0 && ypos < 40) // ------------------------------------------------------- // Pression sur le bouton "OFF"
  2535.       {
  2536.         if (ModeManuelHumiditeReglage) // ..................................................................................... // Si l'indicateur de réglage du mode manuel est activé
  2537.         {
  2538.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2539.           ModeManuelHumiditeReglage = false;                                                                                    // Désactive l'indicateur de réglage du mode manuel
  2540.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2541.         }
  2542.       }
  2543.       else if (xpos > 390 && xpos < 420 && ypos > 10 && ypos < 30)// -------------------------------------------------------- // Pression sur le bouton "ON"
  2544.       {
  2545.         if (!ModeManuelHumiditeReglage) // .................................................................................... // Si l'indicateur de réglage du mode manuel est désactivé
  2546.         {
  2547.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2548.           ModeManuelHumiditeReglage = true;                                                                                     // Active l'indicateur de réglage du mode manuel
  2549.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2550.         }
  2551.       }
  2552.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) // ------------------------------------------------------------ // Pression sur le titre de la Page 101 avec l'icône "X"
  2553.       {
  2554.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2555.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2556.       }
  2557.       else if (xpos > 25 && xpos < 35 && ypos > 175 && ypos < 185) // ------------------------------------------------------- // Pression sur le bouton ">"
  2558.       {
  2559.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2560.         PageCourante = 102;                                                                                                     // Sélectionne la Page 102 => Réglage des heures des seuils jour/nuit
  2561.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2562.       }
  2563.       else if ((xpos > 465 && xpos < 480)  && ypos > 170 && ypos < 190) // ------------------------------------ // Pression sur le bouton "<"
  2564.       {
  2565.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2566.         PageCourante = 100;                                                                                                     // Sélectionne la Page 100 => Réglage du seuil de jour de la température
  2567.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2568.       }
  2569.       else if ((xpos > 460  && xpos < 480) && ypos > 0 && ypos < 20) // ------------------------------------- // Pression sur le bouton "Haut"
  2570.       {
  2571.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2572.         PageCourante = 201;                                                                                                     // Sélectionne la Page 201 => Réglage du seuil de nuit du taux d'humidité
  2573.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2574.       }
  2575.       else if (xpos > 0 && xpos < 35 && ypos > 0 && ypos < 35) // ------------------------------------------------------- // Pression sur le bouton "Bas"
  2576.       {
  2577.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2578.         PageCourante = 201;                                                                                                     // Sélectionne la Page 201 => Réglage du seuil de nuit du taux d'humidité
  2579.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2580.       }
  2581.     }
  2582. //**************************************************************************************************************************************************************************
  2583.     else if (PageCourante == 201) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 201 est sélectionnée => Page réglage du seuil de nuit du taux d'humidité
  2584.     {
  2585.       if (xpos > 395 && xpos < 402 && ypos > 140 && ypos < 158) // -------------------------------------------------------------- // Pression sur l'icone "-"
  2586.       {
  2587.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2588.         SeuilHumiditeNuitReglage = SeuilHumiditeNuitReglage - 0.5;                                                              // Modifie le seuil de nuit de réglage du taux d'humidité
  2589.         if (SeuilHumiditeNuitReglage <= SeuilMinHumiditeNuitReglage) // ....................................................... // Si le seuil de nuit de réglage du taux d'humidité est inférieur ou égale au seuil de nuit min de réglage du taux d'humidité
  2590.         {
  2591.           SeuilHumiditeNuitReglage = SeuilMinHumiditeNuitReglage;                                                               // Borne le seuil de nuit de réglage du taux d'humidité
  2592.         }
  2593.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2594.       }
  2595.       else if (xpos > 50 && xpos < 60 && ypos > 140 && ypos < 150) // ------------------------------------------------------- // Pression sur l'icone "+"
  2596.       {
  2597.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2598.         SeuilHumiditeNuitReglage = SeuilHumiditeNuitReglage + 0.5;                                                              // Modifie le seuil de nuit de réglage du taux d'humidité
  2599.         if (SeuilHumiditeNuitReglage >= SeuilMaxHumiditeNuitReglage) // ....................................................... // Si le seuil de nuit de réglage de la température est supérieur ou égale au seuil de nuit max de réglage du taux d'humidité
  2600.         {
  2601.           SeuilHumiditeNuitReglage = SeuilMaxHumiditeNuitReglage;                                                               // Borne le seuil de nuit de réglage du taux d'humidité
  2602.         }
  2603.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2604.       }
  2605.       else if (xpos > 63 && xpos < 132 && ypos > 0 && ypos < 40) // ------------------------------------------------------- // Pression sur le bouton "OFF"
  2606.       {
  2607.         if (ModeManuelHumiditeReglage) // ..................................................................................... // Si l'indicateur de réglage du mode manuel est activé
  2608.         {
  2609.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2610.           ModeManuelHumiditeReglage = false;                                                                                    // Désactive l'indicateur de réglage du mode manuel
  2611.         }
  2612.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2613.       }
  2614.       else if (xpos > 390 && xpos < 420 && ypos > 10 && ypos < 30) // -------------------------------------------------------- // Pression sur le bouton "ON"
  2615.       {
  2616.         if (!ModeManuelHumiditeReglage) // .................................................................................... // Si l'indicateur de réglage du mode manuel est désactivé
  2617.         {
  2618.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2619.           ModeManuelHumiditeReglage = true;                                                                                     // Active l'indicateur de réglage du mode manuel
  2620.         }
  2621.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2622.       }
  2623.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325)// ------------------------------------------------------------ // Pression sur le titre de la Page 201 avec l'icône "X"
  2624.       {
  2625.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2626.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2627.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  2628.       }
  2629.       else if ((xpos > 460  && xpos < 480) && ypos > 0 && ypos < 20) // ------------------------------------------------------- // Pression sur le bouton "Haut"
  2630.       {
  2631.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2632.         PageCourante = 101;                                                                                                     // Sélectionne la Page 101 => Réglage du seuil de jour du taux d'humidité
  2633.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2634.       }
  2635.       else if (xpos > 0 && xpos < 35 && ypos > 0 && ypos < 35) // ------------------------------------- // Pression sur le bouton "Bas"
  2636.       {
  2637.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2638.         PageCourante = 101;                                                                                                     // Sélectionne la Page 101 => Réglage du seuil de jour du taux d'humidité
  2639.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2640.       }
  2641.       else if (xpos > 20 && xpos < 40 && ypos > 95 && ypos < 110) // ------------------------------------------------------- // Pression sur l'icone "X"
  2642.       {
  2643.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2644.         PageCourante = 101;                                                                                                     // Sélectionne la Page 101 => Réglage du seuil de jour du taux d'humidité
  2645.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  2646.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2647.       }
  2648.       else if ((xpos > 450 && xpos < 65510) && ypos > 95 && ypos < 110) // ------------------------------------ // Pression sur l'icone "OK"
  2649.       {
  2650.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2651.         SeuilHumiditeJour = SeuilHumiditeJourReglage;                                                                           // Transfère le seuil de jour de réglage du taux d'humidité dans le seuil de jour du taux d'humidité
  2652.         SeuilHumiditeNuit = SeuilHumiditeNuitReglage;                                                                           // Transfère le seuil de nuit de réglage du taux d'humidité dans le seuil de nuit du taux d'humidité
  2653.         ModeManuelHumidite = ModeManuelHumiditeReglage;                                                                         // Transfère l'indicateur de réglage du mode manuel du taux d'humidité dans l'indicateur du mode manuel du taux d'humidité
  2654.         EEPROM.put(4, SeuilHumiditeJour);                                                                                       // Mémorise le seuil de jour du taux d'humidité
  2655.         EEPROM.put(20, SeuilHumiditeNuit);                                                                                      // Mémorise le seuil de nuit du taux d'humidité
  2656.         EEPROM.put(12, ModeManuelHumidite);                                                                                     // Mémorise l'indicateur du mode manuel du taux d'humidité
  2657.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2658.         FonctionPageAffichageValidationReglages();                                                                              // Appelle la fonction d'affichage validation réglages
  2659.       }
  2660.     }
  2661. //**************************************************************************************************************************************************************************
  2662.     else if (PageCourante == 102) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 102 est sélectionnée => Page réglage des heures de départ jour et de départ nuit pour activer les seuils en fonction du mode jour/nuit
  2663.     {
  2664.       if (xpos > 405 && xpos < 420 && ypos > 173 && ypos < 185) // -------------------------------------------------------------- // Pression sur l'icone "+" Départ jour
  2665.       {
  2666.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2667.         HrsDepartSeuilsModeJourReglage++; if (HrsDepartSeuilsModeJourReglage > 23) {HrsDepartSeuilsModeJourReglage = 0;}        // Modifie et Borne les heures départ de réglage seuils mode jour
  2668.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2669.       }
  2670.       else if (xpos > 350 && xpos < 360 && ypos > 173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Départ jour
  2671.       {
  2672.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2673.         MinsDepartSeuilsModeJourReglage++; if (MinsDepartSeuilsModeJourReglage > 59) {MinsDepartSeuilsModeJourReglage = 0;}     // Modifie et Borne les minutes départ de réglage seuils mode nuit
  2674.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2675.       }
  2676.       else if (xpos > 140 && xpos < 150 && ypos > 173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Départ nuit
  2677.       {
  2678.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2679.         HrsDepartSeuilsModeNuitReglage++; if (HrsDepartSeuilsModeNuitReglage > 23) {HrsDepartSeuilsModeNuitReglage = 0;}        // Modifie et Borne les heures départ de réglage seuils mode nuit
  2680.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2681.       }
  2682.       else if (xpos > 90 && xpos < 100 && ypos > 173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Départ nuit
  2683.       {
  2684.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2685.         MinsDepartSeuilsModeNuitReglage++; if (MinsDepartSeuilsModeNuitReglage > 59) {MinsDepartSeuilsModeNuitReglage = 0;}     // Modifie et Borne les minutes départ de réglage seuils mode nuit
  2686.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2687.       }
  2688.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) //------------------------------------------------------------- // Pression sur le titre de la Page 102 avec l'icône "X"
  2689.       {
  2690.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2691.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2692.       }
  2693.       else if (xpos > 25 && xpos < 35 && ypos > 175 && ypos < 185) // ------------------------------------------------------- // Pression sur le bouton ">"
  2694.       {
  2695.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2696.         PageCourante = 103;                                                                                                     // Sélectionne la Page 103 => Réglage du programmateur horaire d'éclairage
  2697.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2698.       }
  2699.       else if ((xpos > 465 && xpos < 480)  && ypos > 170 && ypos < 190) // ------------------------------------ // Pression sur le bouton "<"
  2700.       {
  2701.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2702.         PageCourante = 101;                                                                                                     // Sélectionne la Page 101 => Réglage du seuil de jour du taux d'humidité
  2703.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2704.       }
  2705.       else if (xpos > 20 && xpos < 40 && ypos > 95 && ypos < 110) // ------------------------------------------------------- // Pression sur l'icone "X"
  2706.       {
  2707.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2708.         PageCourante = 102;                                                                                                     // Sélectionne la Page 102 => Page réglage des heures de départ jour et de départ nuit pour activer les seuils en fonction du mode jour/nuit
  2709.         LastPageCourante = -1;                                                                                                  // Réinitialise la dernière Page courante
  2710.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  2711.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2712.       }
  2713.       else if ((xpos > 450 && xpos < 65510) && ypos > 95 && ypos < 110) // ------------------------------------ // Pression sur l'icone "OK"
  2714.       {
  2715.         if (HrsDepartSeuilsModeJourReglage == HrsDepartSeuilsModeNuitReglage // ............................................... // Si les heures départ de réglage seuils mode jour sont égales aux heures départ de réglage seuils mode nuit
  2716.         && MinsDepartSeuilsModeJourReglage == MinsDepartSeuilsModeNuitReglage)
  2717.         {
  2718.           FonctionPageMessagesErreur();                                                                                         // Appelle la fonction d'affichage des messages d'erreur
  2719.           PageCourante = 102;                                                                                                   // Sélectionne la Page 102 => Page réglage des heures de départ jour et de départ nuit pour activer les seuils en fonction du mode jour/nuit
  2720.           LastPageCourante = -1;                                                                                                // Réinitialise la dernière Page courante
  2721.           FonctionReinitialisationVariablesAffichage();                                                                         // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  2722.         }
  2723.         else // ............................................................................................................... // Validation des réglages
  2724.         {
  2725.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2726.           HrsDepartSeuilsModeJour = HrsDepartSeuilsModeJourReglage;                                                             // Transfère les heures départ de réglage seuils mode jour dans les heures départ seuils mode jour
  2727.           MinsDepartSeuilsModeJour = MinsDepartSeuilsModeJourReglage;                                                           // Transfère les minutes départ de réglage seuils mode jour dans les minutes départ seuils mode jour
  2728.           HrsDepartSeuilsModeNuit = HrsDepartSeuilsModeNuitReglage;                                                             // Transfère les heures départ de réglage seuils mode nuit dans les heures départ seuils mode nuit
  2729.           MinsDepartSeuilsModeNuit = MinsDepartSeuilsModeNuitReglage;                                                           // Transfère les minutes départ de réglage seuils mode nuit dans les minutes départ seuils mode nuit
  2730.           EEPROM.put(24, HrsDepartSeuilsModeJour);                                                                              // Mémorise les heures départ seuils mode jour
  2731.           EEPROM.put(28, MinsDepartSeuilsModeJour);                                                                             // Mémorise les minutes départ seuils mode jour
  2732.           EEPROM.put(32, HrsDepartSeuilsModeNuit);                                                                              // Mémorise les heures départ seuils mode nuit
  2733.           EEPROM.put(36, MinsDepartSeuilsModeNuit);                                                                             // Mémorise les minutes départ seuils mode nuit
  2734.           PageCourante = 0;                                                                                                     // Sélectionne la Page 0 => Page principale
  2735.           FonctionPageAffichageValidationReglages();                                                                            // Appelle la fonction d'affichage validation réglages
  2736.         }
  2737.       }
  2738.     }
  2739. //**************************************************************************************************************************************************************************
  2740.     else if (PageCourante == 103) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante 103 est sélectionnée => Page réglage du programmateur horaire d'éclairage
  2741.     {
  2742.       if (millis() - tempoPression >= 500ul && tempoPression != 0 || tempoPression == 0) // ----------------------------------- // Si la temporisation entre deux pressions est écoulée ou Si elle est égale à 0
  2743.       {
  2744.         if (xpos > 380 && xpos < 400 && ypos > 120 && ypos < 130)  // ............................................................. // Pression sur le bouton "D"
  2745.         {
  2746.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2747.           IterationProgHoraireEclairageReglage[0] = !IterationProgHoraireEclairageReglage[0];                                   // Inverse l'itération 0 de réglage
  2748.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2749.         }
  2750.         else if (xpos > 330 && xpos < 350 && ypos > 120 && ypos < 130) // ...................................................... // Pression sur le bouton "L"
  2751.         {
  2752.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2753.           IterationProgHoraireEclairageReglage[1] = !IterationProgHoraireEclairageReglage[1];                                   // Inverse l'itération 1 de réglage
  2754.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2755.         }
  2756.         else if (xpos > 280 && xpos < 290 && ypos > 120 && ypos < 130)  // ..................................................... // Pression sur le bouton "M"
  2757.         {
  2758.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2759.           IterationProgHoraireEclairageReglage[2] = !IterationProgHoraireEclairageReglage[2];                                   // Inverse l'itération 2 de réglage
  2760.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2761.         }
  2762.         else if (xpos > 235 && xpos < 245 && ypos > 120 && ypos < 130) // ..................................................... // Pression sur le bouton "M"
  2763.         {
  2764.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2765.           IterationProgHoraireEclairageReglage[3] = !IterationProgHoraireEclairageReglage[3];                                   // Inverse l'itération 3 de réglage
  2766.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2767.         }
  2768.         else if (xpos > 180 && xpos < 190 && ypos > 120 && ypos < 130)  // ..................................................... // Pression sur le bouton "J"
  2769.         {
  2770.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2771.           IterationProgHoraireEclairageReglage[4] = !IterationProgHoraireEclairageReglage[4];                                   // Inverse l'itération 4 de réglage
  2772.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2773.         }
  2774.         else if (xpos > 130 && xpos < 140 && ypos > 120 && ypos < 130) // ..................................................... // Pression sur le bouton "V"
  2775.         {
  2776.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2777.           IterationProgHoraireEclairageReglage[5] = !IterationProgHoraireEclairageReglage[5];                                   // Inverse l'itération 5 de réglage
  2778.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2779.         }
  2780.         else if (xpos > 80 && xpos < 90 && ypos > 120 && ypos < 130) // ..................................................... // Pression sur le bouton "S"
  2781.         {
  2782.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2783.           IterationProgHoraireEclairageReglage[6] = !IterationProgHoraireEclairageReglage[6];                                   // Inverse l'itération 6 de réglage
  2784.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  2785.         }
  2786.        
  2787.         tempoPression = millis();                                                                                               // (Dé)Redémarre la temporisation entre deux pressions
  2788.       }
  2789.      
  2790.       if (xpos > 150 && xpos < 160 && ypos > 200 && ypos < 290) // ------------------------------------------------------------- // Pression sur l'heure de départ ou d'arrêt
  2791.       {
  2792.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2793.         PageCourante = 203;                                                                                                     // Sélectionne la Page 203 => Réglage du programmateur d'éclairage
  2794.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2795.       }
  2796.       else if (xpos > 90 && xpos < 115 && ypos > 10 && ypos < 25) // ------------------------------------------------------- // Pression sur le bouton "OFF"
  2797.       {
  2798.         if (ModeProgHoraireEclairageReglage) // ............................................................................... // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage est activé
  2799.         {
  2800.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2801.           ModeProgHoraireEclairageReglage = false;                                                                              // Désactive l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage
  2802.         }
  2803.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2804.       }
  2805.       else if (xpos > 380 && xpos < 400 && ypos > 10 && ypos < 25) // -------------------------------------------------------- // Pression sur le bouton "ON"
  2806.       {
  2807.         if (!ModeProgHoraireEclairageReglage) // .............................................................................. // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage est désactivé
  2808.         {
  2809.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  2810.           ModeProgHoraireEclairageReglage = true;                                                                               // Active l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage
  2811.         }
  2812.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2813.       }
  2814.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) // ------------------------------------------------------------ // Pression sur le titre de la Page 103 avec l'icône "X"
  2815.       {
  2816.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2817.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2818.       }
  2819.       else if (xpos > 25 && xpos < 35 && ypos > 175 && ypos < 185) // ------------------------------------------------------- // Pression sur le bouton ">"
  2820.       {
  2821.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2822.         PageCourante = 104;                                                                                                     // Sélectionne la Page 104 => Page réglage du programmateur horaire des repas
  2823.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2824.       }
  2825.       else if ((xpos > 465 && xpos < 480)  && ypos > 170 && ypos < 190) // ------------------------------------ // Pression sur le bouton "<"
  2826.       {
  2827.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2828.         PageCourante = 102;                                                                                                     // Sélectionne la Page 102 => Réglage des heures de départ jour et de départ nuit pour activer les seuils en fonction du mode jour/nuit
  2829.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2830.       }
  2831.       else if ((xpos > 460  && xpos < 480) && ypos > 0 && ypos < 20) // ------------------------------------- // Pression sur le bouton "Haut"
  2832.       {
  2833.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2834.         PageCourante = 203;                                                                                                     // Sélectionne la Page 203 => Réglage du programmateur d'éclairage
  2835.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2836.       }
  2837.       else if (xpos > 0 && xpos < 35 && ypos > 0 && ypos < 35)  // ------------------------------------------------------- // Pression sur le bouton "Bas"
  2838.       {
  2839.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2840.         PageCourante = 203;                                                                                                     // Sélectionne la Page 203 => Réglage du programmateur d'éclairage
  2841.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2842.       }
  2843.     }
  2844. //**************************************************************************************************************************************************************************
  2845.     else if (PageCourante == 203) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante 203 est sélectionnée => Page réglage du programmateur horaire d'éclairage
  2846.     {
  2847.       if (xpos > 405 && xpos < 420 && ypos > 173 && ypos < 185) // -------------------------------------------------------------- // Pression sur l'icone "+" Départ
  2848.       {
  2849.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2850.         HrsDepartProgHoraireEclairageReglage++;                                                                                 // Modifie les heures de départ de réglage du programmateur horaire de l'éclairage
  2851.         if (HrsDepartProgHoraireEclairageReglage > 23) {HrsDepartProgHoraireEclairageReglage = 0;}                              // Borne les heures de départ de réglage du programmateur horaire de l'éclairage
  2852.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2853.       }
  2854.       else if (xpos > 350 && xpos < 360 && ypos > 173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Départ
  2855.       {
  2856.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2857.         MinsDepartProgHoraireEclairageReglage++;                                                                                // Modifie les minutes de départ de réglage du programmateur horaire de l'éclairage
  2858.         if (MinsDepartProgHoraireEclairageReglage > 59) {MinsDepartProgHoraireEclairageReglage = 0;}                            // Borne les minutes de départ de réglage du programmateur horaire de l'éclairage
  2859.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2860.       }
  2861.       else if (xpos > 140 && xpos < 150 && ypos > 173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Arrêt
  2862.       {
  2863.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2864.         HrsArretProgHoraireEclairageReglage++;                                                                                  // Modifie les heures d'arrêt de réglage du programmateur horaire de l'éclairage
  2865.         if (HrsArretProgHoraireEclairageReglage > 23) {HrsArretProgHoraireEclairageReglage = 0;}                                // Modifie les heures d'arrêt de réglage du programmateur horaire de l'éclairage
  2866.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2867.       }
  2868.       else if (xpos > 90 && xpos < 100 && ypos > 173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Arrêt
  2869.       {
  2870.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2871.         MinsArretProgHoraireEclairageReglage++;                                                                                 // Modifie les minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  2872.         if (MinsArretProgHoraireEclairageReglage > 59) {MinsArretProgHoraireEclairageReglage = 0;}                              // Borne les minutes d'arrêt de réglage du programmateur horaire de l'éclairage
  2873.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2874.       }
  2875.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) //------------------------------------------------------------- // Pression sur le titre de la Page 203 avec l'icône "X"
  2876.       {
  2877.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2878.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2879.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  2880.       }
  2881.       else if ((xpos > 460  && xpos < 480) && ypos > 0 && ypos < 20) // ------------------------------------------------------- // Pression sur le bouton "Haut"
  2882.       {
  2883.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2884.         PageCourante = 103;                                                                                                     // Sélectionne la Page 103 => Réglage du programmateur horaire d'éclairage
  2885.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2886.       }
  2887.       else if (xpos > 0 && xpos < 35 && ypos > 0 && ypos < 35) // ------------------------------------- // Pression sur le bouton "Bas"
  2888.       {
  2889.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2890.         PageCourante = 103;                                                                                                     // Sélectionne la Page 103 => Réglage du programmateur horaire d'éclairage
  2891.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2892.       }
  2893.       else if (xpos > 20 && xpos < 40 && ypos > 95 && ypos < 110) // ------------------------------------------------------- // Pression sur l'icone "X"
  2894.       {
  2895.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2896.         PageCourante = 103;                                                                                                     // Sélectionne la Page 103 => Réglage du programmateur horaire d'éclairage
  2897.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  2898.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2899.       }
  2900.       else if ((xpos > 450 && xpos < 65510) && ypos > 95 && ypos < 110)// ------------------------------------ // Pression sur l'icone "OK"
  2901.       {
  2902.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2903.         if (HrsDepartProgHoraireEclairageReglage == HrsArretProgHoraireEclairageReglage // .................................... // Si les heures de départ de réglage du programmateur horaire de l'éclairage sont égales aux heures d'arrêt de réglage du programmateur horaire de l'éclairage
  2904.         && MinsDepartProgHoraireEclairageReglage == MinsArretProgHoraireEclairageReglage)
  2905.         {
  2906.           FonctionPageMessagesErreur();                                                                                         // Appelle la fonction d'affichage des messages d'erreur
  2907.           PageCourante = 203;                                                                                                   // Sélectionne la Page 203 => Réglage du programmateur d'éclairage
  2908.           LastPageCourante = -1;                                                                                                // Réinitialise la dernière Page courante
  2909.           FonctionReinitialisationVariablesAffichage();                                                                         // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  2910.         }
  2911.         else // ............................................................................................................... // Validation des réglages
  2912.         {
  2913.           HrsDepartProgHoraireEclairage = HrsDepartProgHoraireEclairageReglage;                                                 // Transfère les heures de départ de réglage du programmateur horaire de l'éclairage dans les heures de départ du programmateur horaire de l'éclairage
  2914.           MinsDepartProgHoraireEclairage = MinsDepartProgHoraireEclairageReglage;                                               // Transfère les minutes de départ de réglage du programmateur horaire de l'éclairage dans les minutes de départ du programmateur horaire de l'éclairage
  2915.           HrsArretProgHoraireEclairage = HrsArretProgHoraireEclairageReglage;                                                   // Transfère les heures d'arrêt de réglage du programmateur horaire de l'éclairage dans les heures d'arrêt du programmateur horaire de l'éclairage
  2916.           MinsArretProgHoraireEclairage = MinsArretProgHoraireEclairageReglage;                                                 // Transfère les minutes d'arrêt de réglage du programmateur horaire de l'éclairage dans les minutes d'arrêt du programmateur horaire de l'éclairage
  2917.           ModeProgHoraireEclairage = ModeProgHoraireEclairageReglage;                                                           // Transfère l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage dans l'indicateur du mode de fonctionnement du programmateur horaire de l'éclairage
  2918.           for (int i = 0; i < 7; i++)                                                                                           // Transfère l'itération de réglage du programmateur horaire de l'éclairage dans l'itération du programmateur horaire de l'éclairage
  2919.           {
  2920.             IterationProgHoraireEclairage[i] = IterationProgHoraireEclairageReglage[i];
  2921.             EEPROM.put(60 + i*4, IterationProgHoraireEclairage[i]);                                                             // Mémorise l'itération du programmateur horaire de l'éclairage
  2922.             delay(20);                                                                                                          // Temporise 20ms
  2923.           }
  2924.           EEPROM.put(40, HrsDepartProgHoraireEclairage);                                                                        // Mémorise les heures de départ du programmateur horaire de l'éclairage
  2925.           EEPROM.put(44, MinsDepartProgHoraireEclairage);                                                                       // Mémorise les minutes de départ du programmateur horaire de l'éclairage
  2926.           EEPROM.put(48, HrsArretProgHoraireEclairage);                                                                         // Mémorise les heures d'arrêt du programmateur horaire de l'éclairage
  2927.           EEPROM.put(52, MinsArretProgHoraireEclairage);                                                                        // Mémorise les minutes d'arrêt du programmateur horaire de l'éclairage
  2928.           EEPROM.put(56, ModeProgHoraireEclairage);                                                                             // Mémorise l'indicateur du mode  de fonctionnement du programmateur horaire de l'éclairage
  2929.           PageCourante = 0;                                                                                                     // Sélectionne la Page 0 => Page principale
  2930.           FonctionPageAffichageValidationReglages();                                                                            // Appelle la fonction d'affichage validation réglages
  2931.         }
  2932.       }
  2933.     }
  2934. //**************************************************************************************************************************************************************************
  2935.     else if (PageCourante == 104) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante 104 est sélectionnée => Page réglage du programmateur horaire des repas
  2936.     {
  2937.       if (xpos > 405 && xpos < 420 && ypos > 173 && ypos < 185) // -------------------------------------------------------------- // Pression sur l'icone "+" Départ repas 1
  2938.       {
  2939.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2940.         HrsDepart1ProgHoraireRepasReglage++;                                                                                    // Modifie les heures de départ1 de réglage du programmateur horaire des repas
  2941.         if (HrsDepart1ProgHoraireRepasReglage > 23) {HrsDepart1ProgHoraireRepasReglage = 0;}                                    // Borne les heures de départ1 de réglage du programmateur horaire des repas
  2942.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2943.       }
  2944.       else if (xpos > 350 && xpos < 360 && ypos > 173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Départ repas 1
  2945.       {
  2946.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2947.         MinsDepart1ProgHoraireRepasReglage++;                                                                                   // Modifie les minutes de départ1 de réglage du programmateur horaire des repas
  2948.         if (MinsDepart1ProgHoraireRepasReglage > 59) {MinsDepart1ProgHoraireRepasReglage = 0;}                                  // Modifie les minutes de départ1 de réglage du programmateur horaire des repas
  2949.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2950.       }
  2951.       else if (xpos > 140 && xpos < 150 && ypos >  173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Départ repas 2
  2952.       {
  2953.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2954.         HrsDepart2ProgHoraireRepasReglage++;                                                                                    // Modifie les heures de départ2 de réglage du programmateur horaire des repas
  2955.         if (HrsDepart2ProgHoraireRepasReglage > 23) {HrsDepart2ProgHoraireRepasReglage = 0;}                                    // Borne les heures de départ2 de réglage du programmateur horaire des repas
  2956.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2957.       }
  2958.       else if (xpos > 90 && xpos < 100 && ypos > 173 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Départ repas 2
  2959.       {
  2960.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2961.         MinsDepart2ProgHoraireRepasReglage++;                                                                                   // Modifie les minutes de départ2 de réglage du programmateur horaire des repas
  2962.         if (MinsDepart2ProgHoraireRepasReglage > 59) {MinsDepart2ProgHoraireRepasReglage = 0;}                                  // Borne les minutes de départ2 de réglage du programmateur horaire des repas
  2963.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2964.       }
  2965.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) //------------------------------------------------------------- // Pression sur le titre de la Page 104 avec l'icône "X"
  2966.       {
  2967.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2968.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  2969.       }
  2970.       else if (xpos > 25 && xpos < 35 && ypos > 175 && ypos < 185)  // ------------------------------------------------------- // Pression sur le bouton ">"
  2971.       {
  2972.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2973.         PageCourante = 105;                                                                                                     // Sélectionne la Page 105 => Réglage menu setup
  2974.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2975.       }
  2976.       else if ((xpos > 465 && xpos < 480)  && ypos > 170 && ypos < 190) // ------------------------------------ // Pression sur le bouton "<"
  2977.       {
  2978.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2979.         PageCourante = 103;                                                                                                     // Sélectionne la Page 103 => Réglage du programmateur horaire d'éclairage
  2980.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2981.       }
  2982.       else if ((xpos > 460  && xpos < 480) && ypos > 0 && ypos < 20) // ------------------------------------- // Pression sur le bouton "Haut"
  2983.       {
  2984.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2985.         PageCourante = 204;                                                                                                     // Sélectionne la Page 204 => Page réglage du programmateur horaire des repas
  2986.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2987.       }
  2988.       else if (xpos > 0 && xpos < 35 && ypos > 0 && ypos < 35) // ------------------------------------------------------- // Pression sur le bouton "Bas"
  2989.       {
  2990.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  2991.         PageCourante = 204;                                                                                                     // Sélectionne la Page 204 => Page réglage du programmateur horaire des repas
  2992.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  2993.       }
  2994.     }
  2995.     else if (PageCourante == 204) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante 204 est sélectionnée => Page réglage du programmateur horaire des repas
  2996.     {
  2997.       if (millis() - tempoPression >= 500ul && tempoPression != 0 || tempoPression == 0) // ----------------------------------- // Si la temporisation entre deux pressions est écoulée ou Si elle est égale à 0
  2998.       {
  2999.         if (xpos > 380 && xpos < 400 && ypos > 120 && ypos < 130) // ............................................................. // Pression sur le bouton "D"
  3000.         {
  3001.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3002.           IterationProgHoraireRepasReglage[0] = !IterationProgHoraireRepasReglage[0];                                           // Inverse l'itération 0 de réglage
  3003.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3004.         }
  3005.         else if (xpos > 330 && xpos < 350 && ypos > 120 && ypos < 130) // ...................................................... // Pression sur le bouton "L"
  3006.         {
  3007.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3008.           IterationProgHoraireRepasReglage[1] = !IterationProgHoraireRepasReglage[1];                                           // Inverse l'itération 1 de réglage
  3009.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3010.         }
  3011.         else if (xpos > 280 && xpos < 290 && ypos > 120 && ypos < 130) // ..................................................... // Pression sur le bouton "M"
  3012.         {
  3013.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3014.           IterationProgHoraireRepasReglage[2] = !IterationProgHoraireRepasReglage[2];                                           // Inverse l'itération 2 de réglage
  3015.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3016.         }
  3017.         else if (xpos > 235 && xpos < 245 && ypos > 120 && ypos < 130) // ..................................................... // Pression sur le bouton "M"
  3018.         {
  3019.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3020.           IterationProgHoraireRepasReglage[3] = !IterationProgHoraireRepasReglage[3];                                           // Inverse l'itération 3 de réglage
  3021.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3022.         }
  3023.         else if (xpos > 180 && xpos < 190 && ypos > 120 && ypos < 130) // ..................................................... // Pression sur le bouton "J"
  3024.         {
  3025.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3026.           IterationProgHoraireRepasReglage[4] = !IterationProgHoraireRepasReglage[4];                                           // Inverse l'itération 4 de réglage
  3027.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3028.         }
  3029.         else if (xpos > 130 && xpos < 140 && ypos > 120 && ypos < 130) // ..................................................... // Pression sur le bouton "V"
  3030.         {
  3031.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3032.           IterationProgHoraireRepasReglage[5] = !IterationProgHoraireRepasReglage[5];                                           // Inverse l'itération 5 de réglage
  3033.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3034.         }
  3035.         else if (xpos > 80 && xpos < 90 && ypos > 120 && ypos < 130) // ..................................................... // Pression sur le bouton "S"
  3036.         {
  3037.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3038.           IterationProgHoraireRepasReglage[6] = !IterationProgHoraireRepasReglage[6];                                           // Inverse l'itération 6 de réglage
  3039.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3040.         }
  3041.        
  3042.         tempoPression = millis();                                                                                               // (Dé)Redémarre la temporisation entre deux pressions
  3043.       }
  3044.      
  3045.       if (xpos > 150 && xpos < 160 && ypos > 200 && ypos < 290) // ------------------------------------------------------------- // Pression sur l'heure de départ ou d'arrêt
  3046.       {
  3047.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3048.         PageCourante = 104;                                                                                                     // Sélectionne la Page 104 => Page réglage du programmateur horaire des repas
  3049.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3050.       }
  3051.       else if (xpos > 90 && xpos < 115 && ypos > 10 && ypos < 25) // ------------------------------------------------------- // Pression sur le bouton "OFF"
  3052.       {
  3053.         if (ModeProgHoraireRepasReglage) // ................................................................................... // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage est activé
  3054.         {
  3055.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3056.           ModeProgHoraireRepasReglage = false;                                                                                  // Désactive l'indicateur de réglage du mode de fonctionnement du programmateur horaire des repas
  3057.         }
  3058.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3059.       }
  3060.       else if(xpos > 380 && xpos < 400 && ypos > 10 && ypos < 25) // -------------------------------------------------------- // Pression sur le bouton "ON"
  3061.       {
  3062.         if (!ModeProgHoraireRepasReglage) // .................................................................................. // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage est désactivé
  3063.         {
  3064.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3065.           ModeProgHoraireRepasReglage = true;                                                                                   // Active l'indicateur de réglage du mode de fonctionnement du programmateur horaire des repas
  3066.         }
  3067.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3068.       }
  3069.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) // ------------------------------------------------------------ // Pression sur le titre de la Page 204 avec l'icône "X"
  3070.       {
  3071.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3072.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3073.       }
  3074.       else if ((xpos > 460  && xpos < 480) && ypos > 0 && ypos < 20) // ------------------------------------------------------- // Pression sur le bouton "Haut"
  3075.       {
  3076.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3077.         PageCourante = 104;                                                                                                     // Sélectionne la Page 104 => Page réglage du programmateur horaire des repas
  3078.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3079.       }
  3080.       else if (xpos > 0 && xpos < 35 && ypos > 0 && ypos < 35) // ------------------------------------- // Pression sur le bouton "Bas"
  3081.       {
  3082.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3083.         PageCourante = 104;                                                                                                     // Sélectionne la Page 104 => Page réglage du programmateur horaire des repas
  3084.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3085.       }
  3086.       else if (xpos > 20 && xpos < 40 && ypos > 95 && ypos < 110) // ------------------------------------------------------- // Pression sur l'icone "X"
  3087.       {
  3088.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3089.         PageCourante = 104;                                                                                                     // Sélectionne la Page 104 => Réglage du seuil de jour de la température
  3090.         LastPageCourante = -1;                                                                                                  // Réinitialise la dernière Page courante
  3091.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  3092.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3093.       }
  3094.       else if ((xpos > 450 && xpos < 65510) && ypos > 95 && ypos < 110) // ------------------------------------ // Pression sur l'icone "OK"
  3095.       {
  3096.         if (HrsDepart1ProgHoraireRepasReglage == HrsDepart2ProgHoraireRepasReglage // ......................................... // Si les heures de départ1 de réglage du programmateur horaire des repas sont égales aux heures de départ2 de réglage du programmateur horaire des repas
  3097.         && MinsDepart1ProgHoraireRepasReglage == MinsDepart2ProgHoraireRepasReglage)
  3098.         {
  3099.           FonctionPageMessagesErreur();                                                                                         // Appelle la fonction d'affichage des messages d'erreur
  3100.           PageCourante = 104;                                                                                                   // Sélectionne la Page 104 => Page réglage du programmateur horaire des repas
  3101.           LastPageCourante = -1;                                                                                                // Réinitialise la dernière Page courante
  3102.           FonctionReinitialisationVariablesAffichage();                                                                         // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  3103.         }
  3104.         else // ............................................................................................................... // Validation des réglages
  3105.         {
  3106.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3107.           HrsDepart1ProgHoraireRepas = HrsDepart1ProgHoraireRepasReglage;                                                       // Transfère les heures de départ1 de réglage du programmateur horaire des repas dans les heures de départ1 du programmateur horaire des repas
  3108.           MinsDepart1ProgHoraireRepas = MinsDepart1ProgHoraireRepasReglage;                                                     // Transfère les minutes de départ1 de réglage du programmateur horaire des repas dans les minutes de départ1 du programmateur horaire des repas
  3109.           HrsDepart2ProgHoraireRepas = HrsDepart2ProgHoraireRepasReglage;                                                       // Transfère les heures de départ2 de réglage du programmateur horaire des repas dans les heures de départ2 du programmateur horaire des repas
  3110.           MinsDepart2ProgHoraireRepas = MinsDepart2ProgHoraireRepasReglage;                                                     // Transfère les minutes de départ2 de réglage du programmateur horaire des repas dans les Minutes de départ2 du programmateur horaire des repas
  3111.           ModeProgHoraireRepas = ModeProgHoraireRepasReglage;                                                                   // Transfère l'indicateur de réglage du mode de fonctionnement du programmateur horaire repas dans l'indicateur du mode de fonctionnement du programmateur horaire des repas
  3112.           for (int i = 0; i < 7; i++)                                                                                           // Transfère l'itération de réglage du programmateur horaire Repas dans l'itération du programmateur horaire des repas
  3113.           {
  3114.             IterationProgHoraireRepas[i] = IterationProgHoraireRepasReglage[i];
  3115.             EEPROM.put(116 + i*4, IterationProgHoraireRepas[i]);                                                                // Mémorise l'itération du programmateur horaire des repas
  3116.           }
  3117.           EEPROM.put(88,HrsDepart1ProgHoraireRepas);                                                                            // Mémorise les heures de départ1 du programmateur horaire des repas
  3118.           EEPROM.put(92,MinsDepart1ProgHoraireRepas);                                                                           // Mémorise les minutes de départ1 du programmateur horaire des repas
  3119.           EEPROM.put(96,HrsDepart2ProgHoraireRepas);                                                                            // Mémorise les heures de départ2 du programmateur horaire des repas
  3120.           EEPROM.put(100,MinsDepart2ProgHoraireRepas);                                                                          // Mémorise les minutes de départ2 du programmateur horaire des repas
  3121.           EEPROM.put(112, ModeProgHoraireRepas);                                                                                // Mémorise l'indicateur du mode  de fonctionnement du programmateur horaire des repas
  3122.          
  3123.           PageCourante = 0;                                                                                                     // Sélectionne la Page 0 => Page principale
  3124.           FonctionPageAffichageValidationReglages();                                                                            // Appelle la fonction d'affichage validation réglages
  3125.         }
  3126.       }
  3127.     }
  3128. //**************************************************************************************************************************************************************************
  3129.     else if (PageCourante == 500) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 500 est sélectionnée => Page mélodie repas
  3130.     {
  3131.       if (xpos > 260 && xpos < 270 && ypos > 100 && ypos < 110) // ------------------------------------------------------------ // Pression sur l'icone "OK"
  3132.       {
  3133.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3134.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3135.       }
  3136.     }
  3137. //**************************************************************************************************************************************************************************
  3138.     else if (PageCourante == 501) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 501 est sélectionnée => Réglage de l'heure courante
  3139.     {
  3140.       if (xpos > 405 && xpos < 415 && ypos > 175 && ypos < 185)  // -------------------------------------------------------------- // Pression sur l'icone "-" Hrs courantes
  3141.       {
  3142.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3143.         HrsReglage--; if (HrsReglage < 0) {HrsReglage = 23;}                                                                    // Modifie et Borne les heures de réglage
  3144.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3145.       }
  3146.       else if (xpos > 335 && xpos < 350 && ypos > 175 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Hrs courantes
  3147.       {
  3148.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3149.         HrsReglage++; if (HrsReglage > 23) {HrsReglage = 0;}                                                                    // Modifie et Borne les heures de réglage
  3150.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3151.       }
  3152.       else if (xpos > 180 && xpos < 190 && ypos > 175 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "-" Mins courantes
  3153.       {
  3154.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3155.         MinsReglage--; if (MinsReglage < 0) {MinsReglage = 59;}                                                                 // Modifie et Borne les minutes de réglage
  3156.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3157.       }
  3158.       else if (xpos > 108 && xpos < 116 && ypos > 175 && ypos < 185) // ------------------------------------------------------- // Pression sur l'icone "+" Mins courantes
  3159.       {
  3160.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3161.         MinsReglage++; if (MinsReglage > 59) {MinsReglage = 0;}                                                                 // Modifie et Borne les minutes de réglage
  3162.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3163.       }
  3164.       else if ((xpos > 450 && xpos < 65510) && ypos > 95 && ypos < 110) // ------------------------------------ // Pression sur l'icone "OK"
  3165.       {
  3166.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3167.         Hrs = HrsReglage;                                                                                                       // Transfère les heures de réglage dans les heures courantes
  3168.         Mins = MinsReglage;                                                                                                     // Transfère les minutes de réglage dans les minutes courantes
  3169.         rtc.adjust(DateTime(Annee, Mois, Jour, Hrs, Mins, Secs));                                                               // Réglage Heure / Date
  3170.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3171.         FonctionPageAffichageValidationReglages();                                                                              // Appelle la fonction d'affichage validation réglages
  3172.       }
  3173.       else if (xpos > 20 && xpos < 40 && ypos > 95 && ypos < 110)  // ------------------------------------------------------- // Pression sur l'icone "X"
  3174.       {
  3175.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3176.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3177.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  3178.       }
  3179.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) //------------------------------------------------------------- // Pression sur le titre de la Page 501 avec l'icône "X"
  3180.       {
  3181.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3182.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3183.       }
  3184.     }
  3185. //**************************************************************************************************************************************************************************
  3186.     else if (PageCourante == 502) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Page courante 501 est sélectionnée => Réglage de la date courante
  3187.     {
  3188.       if (millis() - tempoPression >= 100ul && tempoPression != 0 || tempoPression == 0) // ----------------------------------- // Si la temporisation entre deux pressions est écoulée ou Si elle est égale à 0
  3189.       {
  3190.         if (xpos > 270 && xpos < 278 && ypos > 210 && ypos < 220) // .......................................................... // Pression sur l'icone "-" Jour
  3191.         {
  3192.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3193.           JourReglage--; if (JourReglage < 1) {JourReglage = 31;}                                                               // Modifie le jour de réglage
  3194.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3195.         }
  3196.         else if (xpos > 100 && xpos < 110 && ypos > 205 && ypos < 213) // ..................................................... // Pression sur l'icone "+" Jour
  3197.         {
  3198.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3199.           JourReglage++; if (JourReglage > 31) {JourReglage = 1;}                                                               // Modifie le jour de réglage
  3200.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3201.         }
  3202.         else if (xpos > 270 && xpos < 278 && ypos > 151 && ypos < 165) // ..................................................... // Pression sur l'icone "-" Mois
  3203.         {
  3204.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3205.           MoisReglage--; if (MoisReglage < 1) {MoisReglage = 12;}                                                               // Modifie le mois de réglage
  3206.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3207.         }
  3208.         else if (xpos > 100 && xpos < 110 && ypos > 150 && ypos < 160) // ..................................................... // Pression sur l'icone "+" Mois
  3209.         {
  3210.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3211.           MoisReglage++; if (MoisReglage > 12) {MoisReglage = 1;}                                                               // Modifie le mois de réglage
  3212.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3213.         }
  3214.        
  3215.         tempoPression = millis();                                                                                               // (Dé)Redémarre la temporisation entre deux pressions
  3216.       }
  3217.       if (xpos > 270 && xpos < 278 && ypos > 95 && ypos < 105) // ------------------------------------------------------------ // Pression sur l'icone "-" Année
  3218.       {
  3219.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3220.         AnneeReglage--; if (AnneeReglage < 2000) {AnneeReglage = 2099;}                                                         // Modifie l'année de réglage
  3221.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3222.       }
  3223.       else if (xpos > 100 && xpos < 110 && ypos > 94 && ypos < 100) // ------------------------------------------------------- // Pression sur l'icone "+" Mois
  3224.       {
  3225.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3226.         AnneeReglage++; if (AnneeReglage > 2099) {AnneeReglage = 2000;}                                                         // Modifie l'année de réglage
  3227.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3228.       }
  3229.       else if ((xpos > 450 && xpos < 65510) && ypos > 95 && ypos < 110) // ------------------------------------ // Pression sur l'icone "OK"
  3230.       {
  3231.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3232.         Jour = JourReglage;                                                                                                     // Transfère le jour de réglage dans le jour de la date courante
  3233.         Mois = MoisReglage;                                                                                                     // Transfère le mois de réglage dans le mois de la date courante
  3234.         Annee = AnneeReglage;                                                                                                   // Transfère l'année de réglage dans l'année de la date courante
  3235.         rtc.adjust(DateTime(Annee, Mois, Jour, Hrs, Mins, Secs));                                                               // Réglage Heure / Date
  3236.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3237.         FonctionPageAffichageValidationReglages();                                                                              // Appelle la fonction d'affichage validation réglages
  3238.       }
  3239.       else if (xpos > 20 && xpos < 40 && ypos > 95 && ypos < 110) // ------------------------------------------------------- // Pression sur l'icone "X"
  3240.       {
  3241.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3242.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3243.         FonctionPageAffichageAnnulationReglages();                                                                              // Appelle la fonction d'affichage annulation réglages
  3244.       }
  3245.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325) //------------------------------------------------------------- // Pression sur le titre de la Page 501 avec l'icône "X"
  3246.       {
  3247.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3248.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3249.       }
  3250.     }
  3251. //**************************************************************************************************************************************************************************
  3252.     else if (PageCourante == 105) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Si la Page courante 105 est sélectionnée => Page menu setup
  3253.     {
  3254.       if (millis() - tempoPression >= 1000ul && tempoPression != 0 || tempoPression == 0) // ---------------------------------- // Si la temporisation entre deux pressions est écoulée ou Si elle est égale à 0
  3255.       {
  3256.         if (xpos > 240 && xpos < 260 && ypos > 190 && ypos < 210) // ........................................................... // Pression sur le bouton "MODE ECO ON/OFF"
  3257.         {
  3258.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3259.           ModeEco = !ModeEco;                                                                                                   // Inverse l'indicateur du mode Eco
  3260.           if (ModeEco)                                                                                                          // Si l'indicateur du mode Eco est activé
  3261.           {
  3262.             EcranTFTOFF = false;                                                                                                // Désactive l'indicateur de l'état de l'écran TFT
  3263.             EcranTFTONTemporaire = false;                                                                                       // Désactive l'indicateur temporaire ON de l'écran TFT
  3264.           }
  3265.           EEPROM.put(104, ModeEco);                                                                                             // Mémorise l'indicateur du mode Eco
  3266.           FonctionPageAffichageValidationReglages();                                                                            // Appelle la fonction d'affichage validation réglages
  3267.           FonctionReinitialisationVariablesAffichage();                                                                         // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  3268.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3269.         }
  3270.         else if (xpos > 240 && xpos < 255 && ypos > 135 && ypos < 165) // ...................................................... // Pression sur le bouton "MODE MUTE ON/OFF"
  3271.         {
  3272.           Buzzer(3, 0, 1);                                                                                                      // Active le buzzer 3ms
  3273.           ModeMute = !ModeMute;                                                                                                 // Inverse l'indicateur du mode Mute
  3274.           EEPROM.put(108, ModeMute);                                                                                            // Mémorise l'indicateur du mode Mute
  3275.           FonctionPageAffichageValidationReglages();                                                                            // Appelle la fonction d'affichage validation réglages
  3276.           FonctionReinitialisationVariablesAffichage();                                                                         // Appelle la fonction de réinitialisation des variable pour forcer l'affichage de la Page
  3277.           t1DebutTempoSortieAutoMenus = millis();                                                                               // (Re)Démarre la temporisation de sortie automatique des menus
  3278.         }
  3279.        
  3280.         tempoPression = millis();                                                                                               // (Dé)Redémarre la temporisation entre deux pressions
  3281.       }
  3282.       if (xpos > 225 && xpos < 245 && ypos > 250 && ypos < 265) // --------------------------------------------------------------- // Pression sur le bouton "REGLAGES PAR DEFAUT"
  3283.       {
  3284.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3285.         etatBoutonReglagesDefaut = true;                                                                                        // Active l'état du bouton "REGLAGES PAR DEFAUT"
  3286.         FonctionRestaurationReglagesDefaut();                                                                                   // Appelle la fonction de restauration des réglages par défaut
  3287.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3288.       }
  3289.       else if (xpos > 15 && xpos < 25 && ypos > 315 && ypos < 325)  //------------------------------------------------------------- // Pression sur le titre de la Page 105 avec l'icône "X"
  3290.       {
  3291.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3292.         PageCourante = 0;                                                                                                       // Sélectionne la Page 0 => Page principale
  3293.       }
  3294.       else if (xpos > 25 && xpos < 35 && ypos > 175 && ypos < 185) // ------------------------------------------------------- // Pression sur le bouton ">"
  3295.       {
  3296.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3297.         PageCourante = 100;                                                                                                     // Sélectionne la Page 100 => Réglage du seuil de jour de la température
  3298.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3299.       }
  3300.       else if ((xpos > 465 && xpos < 480)  && ypos > 170 && ypos < 190) // ------------------------------------ // Pression sur le bouton "<"
  3301.       {
  3302.         Buzzer(3, 0, 1);                                                                                                        // Active le buzzer 3ms
  3303.         PageCourante = 104;                                                                                                     // Sélectionne la Page 104 => Page réglage du programmateur horaire des repas
  3304.         t1DebutTempoSortieAutoMenus = millis();                                                                                 // (Re)Démarre la temporisation de sortie automatique des menus
  3305.       }
  3306.     }
  3307.   }
  3308. }
  3309.  
  3310. //**************************************************************************************************************************************************************************
  3311. //*** Fonction Page d'affichage de la Page mode eco ************************************************************************************************************************
  3312. //**************************************************************************************************************************************************************************
  3313. void FonctionPageAffichageModeEcoActive ()
  3314. {
  3315.   tft.fillScreen(BLACK);                                                                                                        // Initialise la couleur du fond d'écran
  3316.  
  3317.   tft.drawRoundRect(0, 0, 480, 320, 40, DARKRED);                                                                               // Trace un cadre en rouge foncé au bord de l'écran TFT
  3318.   tft.drawRoundRect(1, 1, 478, 318, 40, DARKRED);
  3319.  
  3320.   tft.drawLine(5, 38, 474, 38, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3321.   tft.drawLine(5, 39, 474, 39, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3322.  
  3323.   tft.drawLine(5, 200, 474, 200, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  3324.   tft.drawLine(5, 201, 474, 201, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  3325.  
  3326.   tft.setTextColor(GREEN);                                                                                                      // Définit la couleur
  3327.   tft.setTextSize(5);                                                                                                           // Définit la taille
  3328.   tft.setCursor(80, 65); LectureMemoireFlash(message48);                                                                        // Positionne et Affiche "MODE ECO"
  3329.   tft.setCursor(110, 135); LectureMemoireFlash(message49);                                                                      // Positionne et Affiche "ACTIVE"
  3330.  
  3331.   Buzzer(100, 50, 2);                                                                                                           // Active le buzzer
  3332.  
  3333.   etatReactivationAffichagePages = false;                                                                                       // Désactive l'indicateur de réactivation d'affichage des Pages
  3334.   TempoReactivationAffichagePages = 3000ul;                                                                                     // Définit la durée avant la réactivation d'affichage des Pages
  3335.   t1DebutTempoReactivationAffichagePages = millis();                                                                            // Démarre la temporisation avant la réactivation d'affichage des Pages
  3336. }
  3337.  
  3338. //**************************************************************************************************************************************************************************
  3339. //*** Fonction d'affichage de la Page validation réglages ******************************************************************************************************************
  3340. //**************************************************************************************************************************************************************************
  3341. void FonctionPageAffichageValidationReglages (){
  3342.  
  3343.   tft.fillScreen(BLACK);                                                                                                        // Initialise la couleur du fond d'écran
  3344.  
  3345.   tft.drawRoundRect(0, 0, 480, 320, 40, DARKRED);                                                                               // Trace un cadre en rouge foncé au bord de l'écran TFT
  3346.   tft.drawRoundRect(1, 1, 478, 318, 40, DARKRED);
  3347.  
  3348.   tft.drawLine(5, 38, 474, 38, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3349.   tft.drawLine(5, 39, 474, 39, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3350.  
  3351.   tft.drawLine(5, 250, 474, 250, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  3352.   tft.drawLine(5, 249, 474, 249, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  3353.  
  3354.   tft.setTextColor(GREEN);                                                                                                      // Définit la couleur
  3355.   tft.setTextSize(5);                                                                                                           // Définit la taille
  3356.   tft.setCursor(100, 90); LectureMemoireFlash(message27);                                                                        // Positionne et Affiche "VALIDATION"
  3357.   tft.setCursor(100, 160); LectureMemoireFlash(message28);                                                                      // Positionne et Affiche "REGLAGES"
  3358.  
  3359.   Buzzer(100, 50, 2);                                                                                                           // Active le buzzer
  3360.  
  3361.   etatReactivationAffichagePages = false;                                                                                       // Désactive l'indicateur de réactivation d'affichage des Pages
  3362.   TempoReactivationAffichagePages = 3000ul;                                                                                     // Définit la durée avant la réactivation d'affichage des Pages
  3363.   t1DebutTempoReactivationAffichagePages = millis();                                                                            // Démarre la temporisation avant la réactivation d'affichage des Pages
  3364.  
  3365.  
  3366. }
  3367.  
  3368. //**************************************************************************************************************************************************************************
  3369. //*** Fonction d'affichage de la Page annulation réglages ******************************************************************************************************************
  3370. //**************************************************************************************************************************************************************************
  3371. void FonctionPageAffichageAnnulationReglages ()
  3372. {
  3373.   tft.fillScreen(BLACK);                                                                                                        // Initialise la couleur du fond d'écran
  3374.  
  3375.   tft.drawRoundRect(0, 0, 480, 320, 40, DARKRED);                                                                               // Trace un cadre en rouge foncé au bord de l'écran TFT
  3376.   tft.drawRoundRect(1, 1, 478, 318, 40, DARKRED);
  3377.  
  3378.   tft.drawLine(5, 38, 474, 38, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3379.   tft.drawLine(5, 39, 474, 39, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3380.  
  3381.   tft.drawLine(5, 250, 474, 250, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  3382.   tft.drawLine(5, 249, 474, 249, DARKRED);                                                                                       // Trace une ligne rouge horizontale
  3383.  
  3384.   tft.setTextColor(GREEN);                                                                                                      // Définit la couleur
  3385.   tft.setTextSize(5);                                                                                                           // Définit la taille
  3386.   tft.setCursor(100, 90); LectureMemoireFlash(message28);                                                                        // Positionne et Affiche "REGLAGES"
  3387.   tft.setCursor(100, 160); LectureMemoireFlash(message54);                                                                       // Positionne et Affiche "ANNULES"
  3388.  
  3389.   Buzzer(300, 0, 1);                                                                                                            // Active le buzzer
  3390.  
  3391.   etatReactivationAffichagePages = false;                                                                                       // Désactive l'indicateur de réactivation d'affichage des Pages
  3392.   TempoReactivationAffichagePages = 3000ul;                                                                                     // Définit la durée avant la réactivation d'affichage des Pages
  3393.   t1DebutTempoReactivationAffichagePages = millis();                                                                            // Démarre la temporisation avant la réactivation d'affichage des Pages
  3394. }
  3395.  
  3396. //**************************************************************************************************************************************************************************
  3397. //*** Fonction Page d'affichage des messages d'erreur **********************************************************************************************************************
  3398. //**************************************************************************************************************************************************************************
  3399. void FonctionPageMessagesErreur ()
  3400. {
  3401.   tft.fillScreen(BLACK);                                                                                                        // Initialise la couleur du fond d'écran
  3402.  
  3403.   tft.drawRoundRect(0, 0, 480, 320, 40, DARKRED);                                                                               // Trace un cadre en rouge foncé au bord de l'écran TFT
  3404.   tft.drawRoundRect(1, 1, 478, 318, 40, DARKRED);
  3405.  
  3406.   tft.drawLine(5, 70, 474, 70, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3407.   tft.drawLine(5, 71, 474, 71, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3408.  
  3409.   tft.drawLine(5, 206, 474, 206, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  3410.   tft.drawLine(5, 207, 474, 207, DARKRED);                                                                                       // Trace une ligne rouge horizontale
  3411.  
  3412.   tft.setTextColor(RED);                                                                                                        // Définit la couleur
  3413.   tft.setTextSize(5);                                                                                                           // Définit la taille
  3414.   tft.setCursor(80, 20); LectureMemoireFlash(message55);                                                                        // Positionne et Affiche "ATTENTION"
  3415.   tft.setTextColor(WHITE);                                                                                                      // Définit la couleur
  3416.   tft.setTextSize(3);                                                                                                           // Définit la taille
  3417.   if (PageCourante == 203) // ************************************************************************************************* // Si la Page 203 est sélectionnée => Page réglage du programmateur horaire d'éclairage
  3418.   {
  3419.     tft.setCursor(80, 96); LectureMemoireFlash(message56);                                                                      // Positionne et Affiche "LES HEURES DE DEPART"
  3420.     tft.setCursor(120, 126); LectureMemoireFlash(message57);                                                                     // Positionne et Affiche "SONT EGALES"
  3421.     tft.setCursor(80, 156); LectureMemoireFlash(message58);                                                                     // Positionne et Affiche "AUX HEURES D'ARRET"
  3422.   }
  3423.   else if (PageCourante == 102) // ******************************************************************************************** // Si la Page 102 est sélectionnée => Page réglage des heures de départ jour et de départ nuit pour activer les seuils en fonction du mode jour/nuit
  3424.   {
  3425.     tft.setCursor(80, 96); LectureMemoireFlash(message59);                                                                      // Positionne et Affiche "LES HEURES DE JOUR"
  3426.     tft.setCursor(120, 126); LectureMemoireFlash(message57);                                                                     // Positionne et Affiche "SONT EGALES"
  3427.     tft.setCursor(80, 156); LectureMemoireFlash(message60);                                                                     // Positionne et Affiche "AUX HEURES DE NUIT"
  3428.   }
  3429.   else if (PageCourante == 204) // ******************************************************************************************** // Si la Page 104 est sélectionnée => Page réglage du programmateur horaire des repas
  3430.   {
  3431.     tft.setCursor(80, 96); LectureMemoireFlash(message61);                                                                      // Positionne et Affiche "LES HEURES DU REPAS 1"
  3432.     tft.setCursor(120, 126); LectureMemoireFlash(message57);                                                                     // Positionne et Affiche "SONT EGALES"
  3433.     tft.setCursor(80, 156); LectureMemoireFlash(message62);                                                                     // Positionne et Affiche "AUX HEURES DU REPAS 2"
  3434.   }
  3435.  
  3436.   Buzzer(300, 0, 1);                                                                                                            // Active le buzzer
  3437.  
  3438.   etatReactivationAffichagePages = false;                                                                                       // Désactive l'indicateur de réactivation d'affichage des Pages
  3439.   TempoReactivationAffichagePages = 3000ul;                                                                                     // Définit la durée avant la réactivation d'affichage des Pages
  3440.   t1DebutTempoReactivationAffichagePages = millis();                                                                            // Démarre la temporisation avant la réactivation d'affichage des Pages
  3441.  
  3442.  
  3443. }
  3444.  
  3445. //**************************************************************************************************************************************************************************
  3446. //*** Fonction Page 500 Mélodie repas **************************************************************************************************************************************
  3447. //**************************************************************************************************************************************************************************
  3448. void FonctionMelodieRepas (int numeroRepas)
  3449. {
  3450.   int melody[] = {                                                                                                              // Tableau des notes du thème de la mélodie Mario
  3451.   NOTE_E7, NOTE_E7, 0, NOTE_E7,
  3452.   0, NOTE_C7, NOTE_E7, 0,
  3453.   NOTE_G7, 0, 0,  0,
  3454.   NOTE_G6, 0, 0, 0,
  3455.  
  3456.   NOTE_C7, 0, 0, NOTE_G6,
  3457.   0, 0, NOTE_E6, 0,
  3458.   0, NOTE_A6, 0, NOTE_B6,
  3459.   0, NOTE_AS6, NOTE_A6, 0,
  3460.  
  3461.   NOTE_G6, NOTE_E7, NOTE_G7,
  3462.   NOTE_A7, 0, NOTE_F7, NOTE_G7,
  3463.   0, NOTE_E7, 0, NOTE_C7,
  3464.   NOTE_D7, NOTE_B6, 0, 0,
  3465.  
  3466.   NOTE_C7, 0, 0, NOTE_G6,
  3467.   0, 0, NOTE_E6, 0,
  3468.   0, NOTE_A6, 0, NOTE_B6,
  3469.   0, NOTE_AS6, NOTE_A6, 0,
  3470.  
  3471.   NOTE_G6, NOTE_E7, NOTE_G7,
  3472.   NOTE_A7, 0, NOTE_F7, NOTE_G7,
  3473.   0, NOTE_E7, 0, NOTE_C7,
  3474.   NOTE_D7, NOTE_B6, 0, 0
  3475.   };
  3476.  
  3477.   int tempo[] = {                                                                                                               // Tableau des tempo du thème de la mélodie Mario
  3478.   12, 12, 12, 12,
  3479.   12, 12, 12, 12,
  3480.   12, 12, 12, 12,
  3481.   12, 12, 12, 12,
  3482.  
  3483.   12, 12, 12, 12,
  3484.   12, 12, 12, 12,
  3485.   12, 12, 12, 12,
  3486.   12, 12, 12, 12,
  3487.  
  3488.   9, 9, 9,
  3489.   12, 12, 12, 12,
  3490.   12, 12, 12, 12,
  3491.   12, 12, 12, 12,
  3492.  
  3493.   12, 12, 12, 12,
  3494.   12, 12, 12, 12,
  3495.   12, 12, 12, 12,
  3496.   12, 12, 12, 12,
  3497.  
  3498.   9, 9, 9,
  3499.   12, 12, 12, 12,
  3500.   12, 12, 12, 12,
  3501.   12, 12, 12, 12,
  3502.   };
  3503.  
  3504.   tft.fillScreen(BLACK);                                                                                                        // Initialise la couleur du fond d'écran
  3505.  
  3506.   tft.drawRoundRect(0, 0, 480, 320, 40, DARKRED);                                                                               // Trace un cadre en rouge foncé au bord de l'écran TFT
  3507.   tft.drawRoundRect(1, 1, 478, 318, 40, DARKRED);
  3508.  
  3509.   tft.setTextSize(3);                                                                                                           // Définit la taille du le texte
  3510.   tft.setTextColor(RED);                                                                                                        // Définit la couleur
  3511.   tft.setCursor(85, 20); LectureMemoireFlash(message42);                                                                       // Positionne et Affiche "IL EST :"
  3512.  
  3513.   tft.setTextColor(WHITE, BLACK);                                                                                               // Définit la couleur
  3514.   tft.setCursor(250, 20);                                                                                                       // Définit la position
  3515.   if (Hrs < 10) {tft.print('0');} tft.print(Hrs);                                                                               // Affiche les heures courantes
  3516.   tft.print(':');                                                                                                               // Affiche les deux points ":" de l'heure
  3517.   if (Mins < 10) {tft.print('0');} tft.print(Mins);                                                                             // Affiche les minutes courantes
  3518.  
  3519.   tft.drawLine(5, 55, 474, 55, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3520.   tft.drawLine(5, 55, 474, 55, DARKRED);                                                                                        // Trace une ligne rouge horizontale
  3521.  
  3522.   tft.setTextSize(2);                                                                                                           // Définit la taille du le texte
  3523.   tft.setTextColor(YELLOW);                                                                                                     // Définit la couleur
  3524.        if (numeroRepas == 1) {tft.setCursor(60, 84); LectureMemoireFlash(message43);}                                           // Positionne et Affiche "C'EST L'HEURE DU PREMIER REPAS"
  3525.   else if (numeroRepas == 2) {tft.setCursor(60, 84); LectureMemoireFlash(message44);}                                           // Positionne et Affiche "C'EST L'HEURE DU DEUXIEME REPAS"
  3526.  
  3527.   tft.drawLine(5, 125, 474, 125, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  3528.   tft.drawLine(5, 125, 474, 125, DARKRED);                                                                                      // Trace une ligne rouge horizontale
  3529.  
  3530.   tft.setTextColor(RED);                                                                                                        // Définit la couleur
  3531.   tft.setCursor(60, 152); LectureMemoireFlash(message45);                                                                       // Positionne et Affiche "APPUYEZ SUR OK POUR SORTIR"
  3532.  
  3533.   tft.setTextSize(2);                                                                                                           // Définit la taille du le texte
  3534.   tft.setTextColor(BLACK, WHITE);                                                                                               // Définit la couleur
  3535.   tft.fillCircle(220, 208, 20, WHITE);                                                                                          // Dessine le bouton "OK"
  3536.   tft.drawCircle(220, 208, 22, WHITE);
  3537.   tft.setCursor(210, 202); LectureMemoireFlash(message41);                                                                       // Positionne et Affiche "OK"
  3538.  
  3539.   int size = sizeof(melody) / sizeof(int);                                                                                      // Déclare et Calcule la taille de la mélodie
  3540.  
  3541.   for (int compteur = 0; compteur < 10; compteur++) // ************************************************************************ // Jour la mélodie 10 fois
  3542.   {
  3543.     for (int thisNote = 0; thisNote < size; thisNote++) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Parcourt toutes les notes de la mélodie
  3544.     {
  3545.       int noteDuration = 1000 / tempo[thisNote];                                                                                // Déclare et Calcule la durée de la note
  3546.      
  3547.       if (ModeMute) {melody[thisNote] = 0;}                                                                                     // Si l'indicateur du mode Mute est activé
  3548.       buzz(BrocheBuzzer, melody[thisNote], noteDuration);                                                                       // Appelle la fonction de lecture de la mélodie repas
  3549.      
  3550.       int pauseBetweenNotes = noteDuration * 1.30;                                                                              // Déclare et Calcule la pause entre les notes
  3551.       delay(pauseBetweenNotes);                                                                                                 // Temporise de la durée de la pause calculée
  3552.      
  3553.       buzz(BrocheBuzzer, 0, noteDuration);                                                                                      // Stoppe la lecture pendant la pause calculée
  3554.      
  3555.       GestionTactile ();                                                                                                        // Appelle la fonction de gestion du mode tactile
  3556.       if (PageCourante == 0) {return;} // ------------------------------------------------------------------------------------- // Si la Page courante 0 est sélectionnée => Sort de la fonction
  3557.     }
  3558.   }
  3559.  
  3560.   PageCourante = 0;                                                                                                             // Sélectionne la Page 0 => Page principale
  3561. }
  3562.  
  3563. //**************************************************************************************************************************************************************************
  3564. //*** Fonction lecture de la mélodie repas *********************************************************************************************************************************
  3565. //**************************************************************************************************************************************************************************
  3566. void buzz (int targetPin, long frequency, long length)
  3567. {
  3568.   digitalWrite(BrocheLedBleueMelodieRepas, HIGH);                                                                               // Active la led bleue mélodie repas
  3569.  
  3570.   long delayValue = 1000000 / frequency / 2;                                                                                    // Déclare et Calcule la valeur du délai entre les transitions
  3571.   long numCycles = frequency * length / 1000;                                                                                   // Déclare et Calcule le nombre de cycles pour une synchronisation appropriée
  3572.  
  3573.   for (long i = 0; i < numCycles; i++) // ************************************************************************************* // Parcourt le nombre de cycles pour la durée calculée
  3574.   {
  3575.     digitalWrite(targetPin, HIGH);                                                                                              // Active le buzzer
  3576.     delayMicroseconds(delayValue);                                                                                              // Temporise de la valeur du délai entre les transitions
  3577.     digitalWrite(targetPin, LOW);                                                                                               // Désactive le buzzer
  3578.     delayMicroseconds(delayValue);                                                                                              // Temporise de la valeur du délai entre les transitions
  3579.   }
  3580.  
  3581.   digitalWrite(BrocheLedBleueMelodieRepas, LOW);                                                                                // Désactive la led bleue mélodie repas
  3582. }
  3583.  
  3584. //**************************************************************************************************************************************************************************
  3585. //*** Fonction de restauration des réglages par défaut *********************************************************************************************************************
  3586. //**************************************************************************************************************************************************************************
  3587. void FonctionRestaurationReglagesDefaut ()
  3588. {
  3589.   SeuilTemperatureJour = 32.5;                                                                                                  // Restaure le seuil de jour de la température par défaut au dessus duquel le ventilateur s'active
  3590.   LastSeuilTemperatureJour = -100.0;                                                                                            // Restaure le dernier seuil de jour de la température
  3591.   SeuilTemperatureNuit = 27.5;                                                                                                  // Restaure le seuil de nuit de la température par défaut au dessus duquel le ventilateur s'active
  3592.   LastSeuilTemperatureNuit = -100.0;                                                                                            // Restaure le dernier seuil de nuit de la température
  3593.   SeuilHumiditeJour = 12.5;                                                                                                     // Restaure le seuil de jour du taux d'humidité par défaut au dessous duquel le brumisateur s'active
  3594.   LastSeuilHumiditeJour = -1.0;                                                                                                 // Restaure le dernier seuil de jour du taux d'humidité
  3595.   SeuilHumiditeNuit = 55.0;                                                                                                     // Restaure le seuil de nuit du taux d'humidité par défaut au dessous duquel le brumisateur s'active
  3596.   LastSeuilHumiditeNuit = -1.0;                                                                                                 // Restaure le dernier seuil de nuit du taux d'humidité
  3597.   ModeManuelTemperature = 0;                                                                                                    // Restaure l'indicateur du mode manuel de la température par défaut
  3598.   ModeManuelHumidite = 0;                                                                                                       // Restaure l'indicateur du mode manuel du taux d'humidité par défaut
  3599.   HrsDepartSeuilsModeJour = 8;                                                                                                  // Restaure les heures départ seuils mode jour par défaut
  3600.   MinsDepartSeuilsModeJour = 30;                                                                                                // Restaure les minutes départ seuils mode jour par défaut
  3601.   HrsDepartSeuilsModeNuit = 22;                                                                                                 // Restaure les heures départ seuils mode nuit par défaut
  3602.   MinsDepartSeuilsModeNuit = 30;                                                                                                // Restaure les minutes départ seuils mode nuit par défaut
  3603.   ModeJourSeuilTemperature = 0;                                                                                                 // Restaure l'indicateur du mode jour pour les seuils de la température par défaut
  3604.   ModeJourSeuilHumidite = 0;                                                                                                    // Restaure l'indicateur du mode jour pour les seuils du taux d'humidité par défaut
  3605.   LastModeJourSeuilTemperature = -1;                                                                                            // Restaure le dernier indicateur du mode jour pour les seuils de la température
  3606.   LastModeJourSeuilHumidite = -1;                                                                                               // Restaure le dernier indicateur du mode jour pour les seuils du taux d'humidité
  3607.   HrsDepartProgHoraireEclairage = 8;                                                                                            // Restaure les heures de départ du programmateur horaire de l'éclairage par défaut
  3608.   MinsDepartProgHoraireEclairage = 30;                                                                                          // Restaure les minutes de départ du programmateur horaire de l'éclairage par défaut
  3609.   HrsArretProgHoraireEclairage = 22;                                                                                            // Restaure les heures d'arrêt du programmateur horaire de l'éclairage par défaut
  3610.   MinsArretProgHoraireEclairage = 30;                                                                                           // Restaure les minutes d'arrêt du programmateur horaire de l'éclairage par défaut
  3611.   ModeProgHoraireEclairage = 1;                                                                                                 // Restaure l'indicateur du mode de fonctionnement du programmateur horaire de l'éclairage par défaut
  3612.   HrsDepart1ProgHoraireRepas = 8;                                                                                               // Restaure les heures de départ1 du programmateur horaire des repas par défaut
  3613.   MinsDepart1ProgHoraireRepas = 30;                                                                                             // Restaure les minutes de départ1 du programmateur horaire des repas par défaut
  3614.   HrsDepart2ProgHoraireRepas = 22;                                                                                              // Restaure les heures de départ2 du programmateur horaire des repas par défaut
  3615.   MinsDepart2ProgHoraireRepas = 30;                                                                                             // Restaure les minutes de départ2 du programmateur horaire des repas par défaut
  3616.   for (int i = 0; i < 7; i++)                                                                                                   // Restaure l'itération du programmateur horaire de l'éclairage par défaut
  3617.   {
  3618.     IterationProgHoraireEclairage[i] = 1;
  3619.   }
  3620.   ModeEco = true;                                                                                                               // Restaure l'indicateur du mode Eco par défaut
  3621.   ModeMute = false;                                                                                                             // Restaure l'indicateur du mode Mute par défaut
  3622.   ModeProgHoraireRepas = 1;                                                                                                     // Restaure l'indicateur du mode de fonctionnement du programmateur horaire des repas par défaut
  3623.   for (int i = 0; i < 7; i++)                                                                                                   // Restaure l'itération du programmateur horaire des repas par défaut
  3624.   {
  3625.     IterationProgHoraireRepas[i] = 1;
  3626.   }
  3627.  
  3628.   EEPROM.put(0, SeuilTemperatureJour);                                                                                          // Mémorise le seuil de jour de la température par défaut
  3629.   EEPROM.put(4, SeuilHumiditeJour);                                                                                             // Mémorise le seuil de jour du taux d'humidité par défaut
  3630.   EEPROM.put(8, ModeManuelTemperature);                                                                                         // Mémorise l'indicateur du mode manuel de la température
  3631.   EEPROM.put(12, ModeManuelHumidite);                                                                                           // Mémorise l'indicateur du mode manuel du taux d'humidité
  3632.   EEPROM.put(16, SeuilTemperatureNuit);                                                                                         // Mémorise le seuil de nuit de la température par défaut
  3633.   EEPROM.put(20, SeuilHumiditeNuit);                                                                                            // Mémorise le seuil de nuit du taux d'humidité par défaut
  3634.   EEPROM.put(24, HrsDepartSeuilsModeJour);                                                                                      // Mémorise les heures de départ seuils mode jour par défaut
  3635.   EEPROM.put(28, MinsDepartSeuilsModeJour);                                                                                     // Mémorise les minutes de départ seuils mode jour par défaut
  3636.   EEPROM.put(32, HrsDepartSeuilsModeNuit);                                                                                      // Mémorise les heures de départ seuils mode nuit par défaut
  3637.   EEPROM.put(36, MinsDepartSeuilsModeNuit);                                                                                     // Mémorise les minutes de départ seuils mode nuit par défaut
  3638.   EEPROM.put(40, HrsDepartProgHoraireEclairage);                                                                                // Mémorise les heures de départ du programmateur horaire de l'éclairage par défaut
  3639.   EEPROM.put(44, MinsDepartProgHoraireEclairage);                                                                               // Mémorise les minutes de départ du programmateur horaire de l'éclairage par défaut
  3640.   EEPROM.put(48, HrsArretProgHoraireEclairage);                                                                                 // Mémorise les heures d'arrêt du programmateur horaire de l'éclairage par défaut
  3641.   EEPROM.put(52, MinsArretProgHoraireEclairage);                                                                                // Mémorise les minutes d'arrêt du programmateur horaire de l'éclairage par défaut
  3642.   EEPROM.put(56, ModeProgHoraireEclairage);                                                                                     // Mémorise l'indicateur du mode de fonctionnement du programmateur horaire de l'éclairage par défaut
  3643.   for (int i = 0; i < 7; i++)                                                                                                   // Mémorise l'itération du programmateur horaire de l'éclairage par défaut si EEPROM non configurée
  3644.   {
  3645.     EEPROM.put(60 + i*4, IterationProgHoraireEclairage[i]);
  3646.   }
  3647.   EEPROM.put(88, HrsDepart1ProgHoraireRepas);                                                                                   // Mémorise les heures de départ1 du programmateur horaire des repas par défaut
  3648.   EEPROM.put(92, MinsDepart1ProgHoraireRepas);                                                                                  // Mémorise les minutes de départ1 du programmateur horaire des repas par défaut
  3649.   EEPROM.put(96, HrsDepart2ProgHoraireRepas);                                                                                   // Mémorise les heures de départ2 du programmateur horaire des repas par défaut
  3650.   EEPROM.put(100, MinsDepart2ProgHoraireRepas);                                                                                 // Mémorise les minutes de départ2 du programmateur horaire des repas par défaut
  3651.   EEPROM.put(104, ModeEco);                                                                                                     // Mémorise l'indicateur du mode Eco par défaut
  3652.   EEPROM.put(108, ModeMute);                                                                                                    // Mémorise l'indicateur du mode Mute par défaut
  3653.   EEPROM.put(112, ModeProgHoraireRepas);                                                                                        // Mémorise le mode de fonctionnement du programmateur horaire des repas par defaut
  3654.   for (int i = 0; i < 7; i++)                                                                                                   // Mémorise l'itération du programmateur horaire des repas par défaut
  3655.   {
  3656.     EEPROM.put(116 + i*4, IterationProgHoraireRepas[i]);
  3657.   }
  3658.  
  3659.   if (ModeProgHoraireEclairage) // ******************************************************************************************** // Si l'indicateur de réglage du mode de fonctionnement du programmateur horaire de l'éclairage est activé
  3660.   {
  3661.     hStartProgHoraireEclairage = HrsDepartProgHoraireEclairage * 100 + MinsDepartProgHoraireEclairage;                          // Convertit les heures et les minutes de départ du programmateur horaire de l'éclairage en un seul nombre
  3662.     hStopProgHoraireEclairage = HrsArretProgHoraireEclairage * 100 + MinsArretProgHoraireEclairage;                             // Convertit les heures et les minutes de d'arrêt du programmateur horaire de l'éclairage en un seul nombre
  3663.     ProgHoraireEclairageStarted = false;                                                                                        // Désactive l'indicateur de déclenchement du programmateur horaire de l'éclairage
  3664.     ProgHoraireEclairageStopped = false;                                                                                        // Désactive l'indicateur de déclenchement du programmateur horaire de l'éclairage
  3665.     TestCreneauHoraireProgHoraireEclairage();                                                                                   // Appelle la fonction test du créneau horaire du programmateur horaire de l'éclairage
  3666.   }
  3667.  
  3668.   if (!ModeManuelTemperature || !ModeManuelHumidite) // *********************************************************************** // Si l'indicateur du mode manuel de la température est désactivé ou Si l'indicateur du mode manuel du taux d'humidité est désactivé
  3669.   {
  3670.     hStartSeuilsModeJour = HrsDepartSeuilsModeJour * 100 + MinsDepartSeuilsModeJour;                                            // Convertit les heures et les minutes de départ seuils mode jour converties en un seul nombre entier
  3671.     hStopSeuilsModeJour = HrsDepartSeuilsModeNuit * 100 + MinsDepartSeuilsModeNuit;                                             // Convertit les heures et les minutes de départ seuils mode nuit converties en un seul nombre entier
  3672.     ProgSeuilsModeJourStarted = false;                                                                                          // Désactive l'indicateur de déclenchement seuils mode jour
  3673.     ProgSeuilsModeNuitStarted = false;                                                                                          // Désactive l'indicateur de déclenchement seuils mode nuit
  3674.     TestCreneauHoraireSeuilsModeJourNuit();                                                                                     // Appelle la fonction test du créneau horaire seuils mode jour/nuit
  3675.   }
  3676. }
  3677.  
  3678. //**************************************************************************************************************************************************************************
  3679. //*** Fonction test du créneau horaire du programmateur horaire de l'éclairage *********************************************************************************************
  3680. //**************************************************************************************************************************************************************************
  3681. void TestCreneauHoraireProgHoraireEclairage ()
  3682. {
  3683.   int hHrs = Hrs * 100 + Mins;                                                                                                  // Convertit les heures et les minutes courantes en un seul nombre entier
  3684.  
  3685.   if (hStartProgHoraireEclairage < hStopProgHoraireEclairage) // ************************************************************** // Teste la plage horaire de fonctionnement programmateur horaire de l'éclairage sur 1 jour
  3686.   {
  3687.     if (hStartProgHoraireEclairage <= hHrs && hHrs < hStopProgHoraireEclairage) // ++++++++++++++++++++++++++++++++++++++++++++ // L'heure courante est dans la plage horaire
  3688.     {
  3689.       //Serial.println("passage1");
  3690.       if (!ProgHoraireEclairageStarted) // ------------------------------------------------------------------------------------ // Démarre le programmateur horaire de l'éclairage
  3691.       {
  3692.         if (IterationProgHoraireEclairage[JourSemaine] == 1) // ............................................................... // Si l'itération du programmateur horaire de l'éclairage du jour de la semaine courant est activé
  3693.         {
  3694.           EtatEclairage = HIGH;                                                                                                 // Active l'indicateur d'état du fonctionnement de l'éclairage
  3695.           LastEtatEclairage = !EtatEclairage;                                                                                   // Inverse l'indicateur du dernier état du fonctionnement de l'éclairage
  3696.           digitalWrite(BrocheLedJauneTemoinEclairage, EtatEclairage);                                                           // Active la led témoin de fonctionnement de l'éclairage
  3697.           digitalWrite(BrocheRelaisEclairage, EtatEclairage);
  3698.             digitalWrite(BrocheRelaisEclairageChauffant, EtatEclairage);
  3699.         digitalWrite(BrocheRelaisVentilationBoitier, EtatEclairage);                                                            // Active le relais de l'éclairage
  3700.         }
  3701.         ProgHoraireEclairageStarted = true; ProgHoraireEclairageStopped = false;                                                // Active l'indicateur de déclenchement du programmateur horaire de l'éclairage
  3702.       }
  3703.     }
  3704.     else // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // L'heure courante est en dehors de la plage horaire
  3705.     {
  3706.       //Serial.println("passage2");
  3707.       if (!ProgHoraireEclairageStopped) // ------------------------------------------------------------------------------------ // Arrête le programmateur horaire de l'éclairage
  3708.       {
  3709.         if (IterationProgHoraireEclairage[JourSemaine] == 1) // ............................................................... // Si l'itération du programmateur horaire de l'éclairage du jour de la semaine courant est activé
  3710.         {
  3711.           EtatEclairage = LOW;                                                                                                  // Désactive l'indicateur d'état du fonctionnement de l'éclairage
  3712.           LastEtatEclairage = !EtatEclairage;                                                                                   // Inverse l'indicateur du dernier état du fonctionnement de l'éclairage
  3713.           digitalWrite(BrocheLedJauneTemoinEclairage, EtatEclairage);                                                           // Désactive la led témoin de fonctionnement de l'éclairage
  3714.           digitalWrite(BrocheRelaisEclairage, EtatEclairage);
  3715.             digitalWrite(BrocheRelaisEclairageChauffant, EtatEclairage);
  3716.         digitalWrite(BrocheRelaisVentilationBoitier, EtatEclairage);                                                             // Désactive le relais de l'éclairage
  3717.         }
  3718.         ProgHoraireEclairageStarted = false; ProgHoraireEclairageStopped = true;                                                // Active l'indicateur d'arrêt du programmateur horaire de l'éclairage
  3719.       }
  3720.     }
  3721.   }
  3722.   else if (hStartProgHoraireEclairage > hStopProgHoraireEclairage) // ********************************************************* // Teste la plage horaire de fonctionnement du programmateur horaire de l'éclairage sur 2 jours
  3723.   {
  3724.     if (hStartProgHoraireEclairage > hHrs && hHrs >= hStopProgHoraireEclairage) // ++++++++++++++++++++++++++++++++++++++++++++ // L'heure courante est en dehors de la plage horaire
  3725.     {
  3726.       //Serial.println("passage3");
  3727.       if (!ProgHoraireEclairageStopped) // ------------------------------------------------------------------------------------ // Arrête le programmateur horaire de l'éclairage
  3728.       {
  3729.         if (IterationProgHoraireEclairage[JourSemaine] == 1) // ............................................................... // Si l'itération du programmateur horaire de l'éclairage du jour de la semaine courant est activé
  3730.         {
  3731.           EtatEclairage = LOW;                                                                                                  // Désactive l'indicateur d'état du fonctionnement de l'éclairage
  3732.           LastEtatEclairage = !EtatEclairage;                                                                                   // Inverse l'indicateur du dernier état du fonctionnement de l'éclairage
  3733.           digitalWrite(BrocheLedJauneTemoinEclairage, EtatEclairage);                                                           // Désactive la led témoin de fonctionnement de l'éclairage
  3734.           digitalWrite(BrocheRelaisEclairage, EtatEclairage);
  3735.             digitalWrite(BrocheRelaisEclairageChauffant, EtatEclairage);
  3736.         digitalWrite(BrocheRelaisVentilationBoitier, EtatEclairage);                                                              // Désactive le relais de l'éclairage
  3737.         }
  3738.         ProgHoraireEclairageStarted = false; ProgHoraireEclairageStopped = true;                                                // Active l'indicateur d'arrêt du programmateur horaire de l'éclairage
  3739.       }
  3740.     }
  3741.     else // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // L'heure courante est dans la plage horaire
  3742.     {
  3743.       //Serial.println("passage4");
  3744.       if (!ProgHoraireEclairageStarted) // ------------------------------------------------------------------------------------ // Démarre le programmateur horaire de l'éclairage
  3745.       {
  3746.         if (IterationProgHoraireEclairage[JourSemaine] == 1) // ............................................................... // Si l'itération du programmateur horaire de l'éclairage du jour de la semaine courant est activé
  3747.         {
  3748.           EtatEclairage = HIGH;                                                                                                 // Active l'indicateur d'état du fonctionnement de l'éclairage
  3749.           LastEtatEclairage = !EtatEclairage;                                                                                   // Inverse l'indicateur du dernier état du fonctionnement de l'éclairage
  3750.           digitalWrite(BrocheLedJauneTemoinEclairage, EtatEclairage);                                                           // Active la led témoin de fonctionnement de l'éclairage
  3751.           digitalWrite(BrocheRelaisEclairage, EtatEclairage);
  3752.             digitalWrite(BrocheRelaisEclairageChauffant, EtatEclairage);
  3753.         digitalWrite(BrocheRelaisVentilationBoitier, EtatEclairage);                                                             // Active le relais de l'éclairage
  3754.         }
  3755.         ProgHoraireEclairageStarted = true; ProgHoraireEclairageStopped = false;                                                // Active l'indicateur de déclenchement du programmateur horaire de l'éclairage
  3756.       }
  3757.     }
  3758.   }
  3759.   else if (hStartProgHoraireEclairage == hStopProgHoraireEclairage) // ******************************************************** // Plage horaire nulle
  3760.   {
  3761.     //Serial.println("passage5");
  3762.     if (!ProgHoraireEclairageStopped) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Arrête le programmateur horaire de l'éclairage
  3763.     {
  3764.       if (IterationProgHoraireEclairage[JourSemaine] == 1) // ----------------------------------------------------------------- // Si l'itération du programmateur horaire de l'éclairage du jour de la semaine courant est activé
  3765.       {
  3766.         EtatEclairage = LOW;                                                                                                    // Désactive l'indicateur d'état du fonctionnement de l'éclairage
  3767.         LastEtatEclairage = !EtatEclairage;                                                                                     // Inverse l'indicateur du dernier état du fonctionnement de l'éclairage
  3768.         digitalWrite(BrocheLedJauneTemoinEclairage, EtatEclairage);                                                             // Désactive la led témoin de fonctionnement de l'éclairage
  3769.         digitalWrite(BrocheRelaisEclairage, EtatEclairage);
  3770.           digitalWrite(BrocheRelaisEclairageChauffant, EtatEclairage);
  3771.         digitalWrite(BrocheRelaisVentilationBoitier, EtatEclairage);                                                              // Désactive le relais de l'éclairage
  3772.       }
  3773.       ProgHoraireEclairageStarted = false; ProgHoraireEclairageStopped = true;                                                  // Active l'indicateur d'arrêt du programmateur horaire de l'éclairage
  3774.     }
  3775.   }
  3776. }
  3777.  
  3778. //**************************************************************************************************************************************************************************
  3779. //*** Fonction la fonction test du créneau horaire seuils mode jour/nuit ***************************************************************************************************
  3780. //**************************************************************************************************************************************************************************
  3781. void TestCreneauHoraireSeuilsModeJourNuit ()
  3782. {
  3783.   int hHrs = Hrs * 100 + Mins;                                                                                                  // Convertit les heures et les minutes courantes en un seul nombre entier
  3784.  
  3785.   if (hStartSeuilsModeJour < hStopSeuilsModeJour) // ************************************************************************** // Teste la plage horaire de fonctionnement des seuils mode jour/nuit sur 1 jour
  3786.   {
  3787.     if (hStartSeuilsModeJour <= hHrs && hHrs < hStopSeuilsModeJour) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // L'heure courante est dans la plage horaire
  3788.     {
  3789.       //Serial.println("passage1");
  3790.       if (!ProgSeuilsModeJourStarted) // -------------------------------------------------------------------------------------- // Démarre les seuils mode jour
  3791.       {
  3792.         if (!ModeManuelTemperature) // ........................................................................................ // Si l'indicateur du mode manuel de la température est désactivé
  3793.         {
  3794.           SeuilTemperatureJourNuit = SeuilTemperatureJour;                                                                      // Transfère le seuil de jour de la température dans le seuil jour / nuit de température
  3795.           ModeJourSeuilTemperature = 1;                                                                                         // Active l'indicateur du mode jour pour les seuils de la température
  3796.           if (LastModeJourSeuilTemperature != ModeJourSeuilTemperature)                                                         // Réinitialise la dernière Page courant
  3797.           {
  3798.             if (PageCourante == 0) {LastPageCourante = -1;}
  3799.           }
  3800.         }
  3801.         if (!ModeManuelHumidite) // ........................................................................................... // Si l'indicateur du mode manuel du taux d'humidité est désactivé
  3802.         {
  3803.           SeuilHumiditeJourNuit = SeuilHumiditeJour;                                                                            // Transfère le seuil de jour du taux d'humidité dans le seuil jour / nuit du taux d'humidité
  3804.           ModeJourSeuilHumidite = 1;                                                                                            // Active l'indicateur du mode jour pour les seuils du taux d'humidité
  3805.           if (LastModeJourSeuilHumidite != ModeJourSeuilHumidite)                                                               // Réinitialise la dernière Page courant
  3806.           {
  3807.             if (PageCourante == 0) {LastPageCourante = -1;}
  3808.           }
  3809.         }
  3810.         ProgSeuilsModeJourStarted = true; ProgSeuilsModeNuitStarted = false;                                                    // Active l'indicateur de déclenchement du seuils mode jour
  3811.       }
  3812.     }
  3813.     else // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // L'heure courante est en dehors de la plage horaire
  3814.     {
  3815.       //Serial.println("passage2");
  3816.       if (!ProgSeuilsModeNuitStarted) // -------------------------------------------------------------------------------------- // Démarre les seuils mode nuit
  3817.       {
  3818.         if (!ModeManuelTemperature) // ........................................................................................ // Si l'indicateur du mode manuel de la température est désactivé
  3819.         {
  3820.           SeuilTemperatureJourNuit = SeuilTemperatureNuit;                                                                      // Transfère le seuil de nuit de la température dans le seuil jour / nuit de température
  3821.           ModeJourSeuilTemperature = 0;                                                                                         // Désactive l'indicateur du mode jour pour les seuils de la température
  3822.           if (LastModeJourSeuilTemperature != ModeJourSeuilTemperature)                                                         // Réinitialise la dernière Page courant
  3823.           {
  3824.             if (PageCourante == 0) {LastPageCourante = -1;}
  3825.           }
  3826.         }
  3827.         if (!ModeManuelHumidite) // ........................................................................................... // Si l'indicateur du mode manuel du taux d'humidité est désactivé
  3828.         {
  3829.           SeuilHumiditeJourNuit = SeuilHumiditeNuit;                                                                            // Transfère le seuil de nuit du taux d'humidité dans le seuil jour / nuit du taux d'humidité
  3830.           ModeJourSeuilHumidite = 0;                                                                                            // Désactive l'indicateur du mode jour pour les seuils du taux d'humidité
  3831.           if (LastModeJourSeuilHumidite != ModeJourSeuilHumidite)                                                               // Réinitialise la dernière Page courant
  3832.           {
  3833.             if (PageCourante == 0) {LastPageCourante = -1;}
  3834.           }
  3835.         }
  3836.         ProgSeuilsModeJourStarted = false; ProgSeuilsModeNuitStarted = true;                                                    // Active l'indicateur de déclenchement seuils mode nuit
  3837.       }
  3838.     }
  3839.   }
  3840.   else if (hStartSeuilsModeJour > hStopSeuilsModeJour) // ********************************************************************* // Teste la Plage horaire des seuils mode jour/nuit sur 2 jours
  3841.   {
  3842.     if (hStartProgHoraireEclairage > hHrs && hHrs >= hStopSeuilsModeJour) // ++++++++++++++++++++++++++++++++++++++++++++++++++ // L'heure courante est en dehors de la plage horaire
  3843.     {
  3844.       //Serial.println("passage3");
  3845.       if (!ProgSeuilsModeNuitStarted) // -------------------------------------------------------------------------------------- // Démarre les seuils mode nuit
  3846.       {
  3847.         if (!ModeManuelTemperature) // ........................................................................................ // Si l'indicateur du mode manuel de la température est désactivé
  3848.         {
  3849.           SeuilTemperatureJourNuit = SeuilTemperatureNuit;                                                                      // Transfère le seuil de nuit de la température dans le seuil jour / nuit de température
  3850.           ModeJourSeuilTemperature = 0;                                                                                         // Désactive l'indicateur du mode jour pour les seuils de la température
  3851.           if (LastModeJourSeuilTemperature != ModeJourSeuilTemperature)                                                         // Réinitialise la dernière Page courant
  3852.           {
  3853.             if (PageCourante == 0) {LastPageCourante = -1;}
  3854.           }
  3855.         }
  3856.         if (!ModeManuelHumidite) // ........................................................................................... // Si l'indicateur du mode manuel du taux d'humidité est désactivé
  3857.         {
  3858.           SeuilHumiditeJourNuit = SeuilHumiditeNuit;                                                                            // Transfère le seuil de nuit du taux d'humidité dans le seuil jour / nuit du taux d'humidité
  3859.           ModeJourSeuilHumidite = 0;                                                                                            // Désactive l'indicateur du mode jour pour les seuils du taux d'humidité
  3860.           if (LastModeJourSeuilHumidite != ModeJourSeuilHumidite)                                                               // Réinitialise la dernière Page courant
  3861.           {
  3862.             if (PageCourante == 0) {LastPageCourante = -1;}
  3863.           }
  3864.         }
  3865.         ProgSeuilsModeJourStarted = false; ProgSeuilsModeNuitStarted = true;                                                    // Active l'indicateur de déclenchement seuils mode nuit
  3866.       }
  3867.     }
  3868.     else // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // L'heure courante est dans la plage horaire
  3869.     {
  3870.       //Serial.println("passage4");
  3871.       if (!ProgSeuilsModeJourStarted) // -------------------------------------------------------------------------------------- // Démarre les seuils mode jour
  3872.       {
  3873.         if (!ModeManuelTemperature) // ........................................................................................ // Si l'indicateur du mode manuel de la température est désactivé
  3874.         {
  3875.           SeuilTemperatureJourNuit = SeuilTemperatureJour;                                                                      // Transfère le seuil de jour de la température dans le seuil jour / nuit de température
  3876.           ModeJourSeuilTemperature = 1;                                                                                         // Active l'indicateur du mode jour pour les seuils de la température
  3877.           if (LastModeJourSeuilTemperature != ModeJourSeuilTemperature)                                                         // Réinitialise la dernière Page courante
  3878.           {
  3879.             if (PageCourante == 0) {LastPageCourante = -1;}
  3880.           }
  3881.         }
  3882.         if (!ModeManuelHumidite) // ........................................................................................... // Si l'indicateur du mode manuel du taux d'humidité est désactivé
  3883.         {
  3884.           SeuilHumiditeJourNuit = SeuilHumiditeJour;                                                                            // Transfère le seuil de jour du taux d'humidité dans le seuil jour / nuit du taux d'humidité
  3885.           ModeJourSeuilHumidite = 1;                                                                                            // Active l'indicateur du mode jour pour les seuils du taux d'humidité
  3886.           if (LastModeJourSeuilHumidite != ModeJourSeuilHumidite)                                                               // Réinitialise la dernière Page courante
  3887.           {
  3888.             if (PageCourante == 0) {LastPageCourante = -1;}
  3889.           }
  3890.         }
  3891.         ProgSeuilsModeJourStarted = true; ProgSeuilsModeNuitStarted = false;                                                    // Active l'indicateur de déclenchement du seuils mode jour
  3892.       }
  3893.     }
  3894.   }
  3895.   else if (hStartSeuilsModeJour == hStopSeuilsModeJour) // ******************************************************************** // Plage horaire nulle
  3896.   {
  3897.     //Serial.println("passage5");
  3898.     if (!ProgSeuilsModeNuitStarted) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Démarre les seuils mode nuit
  3899.     {
  3900.       if (!ModeManuelTemperature) // ------------------------------------------------------------------------------------------ // Si l'indicateur du mode manuel de la température est désactivé
  3901.       {
  3902.         SeuilTemperatureJourNuit = SeuilTemperatureNuit;                                                                        // Transfère le seuil de nuit de la température dans le seuil jour / nuit de température
  3903.         ModeJourSeuilTemperature = 0;                                                                                           // Désactive l'indicateur du mode jour pour les seuils de la température
  3904.         if (LastModeJourSeuilTemperature != ModeJourSeuilTemperature)                                                           // Réinitialise la dernière Page courante
  3905.         {
  3906.           if (PageCourante == 0) {LastPageCourante = -1;}
  3907.         }
  3908.       }
  3909.       if (!ModeManuelHumidite) // --------------------------------------------------------------------------------------------- // Si l'indicateur du mode manuel du taux d'humidité est désactivé
  3910.         {
  3911.           SeuilHumiditeJourNuit = SeuilHumiditeNuit;                                                                            // Transfère le seuil de nuit du taux d'humidité dans le seuil jour / nuit du taux d'humidité
  3912.           ModeJourSeuilHumidite = 0;                                                                                            // Désactive l'indicateur du mode jour pour les seuils du taux d'humidité
  3913.           if (LastModeJourSeuilHumidite != ModeJourSeuilHumidite)                                                               // Réinitialise la dernière Page courante
  3914.           {
  3915.             if (PageCourante == 0) {LastPageCourante = -1;}
  3916.           }
  3917.         }
  3918.       ProgSeuilsModeJourStarted = false; ProgSeuilsModeNuitStarted = true;                                                      // Active l'indicateur de déclenchement seuils mode nuit
  3919.     }
  3920.   }
  3921. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement