Description pour MENU Ver1.4 - MICRO-INFO du 09/03/2011. ------------------------------------------------------- Description des tâches pour le "MENU" suite à la réunion du 26/01/2011 Modifications suite à la réunion du 09/02/2011. Modifications J-P du 28/02/2011, 02/03/2011, 09/03/2011 Note: La vidéo inverse n'existant pas sur LCD Texte, nous ferons clignoter le premier caractère de l'option sélectionnée, quant au changement de valeurs, nous mettrons le curseur sous le digit le plus à droite de la valeur à modifier. Construction et explication du "Menu". -------------------------------------- Le "MENU" est composé de "Codes Actions", de "Tableaux" et d'un fichier chargé en EEprom. - Les "Codes Action" vont de 128 à 144. ( Voir ci-dessous ). - Les Tableaux sont: "Indice(18)", "LimitBas(18)", "LimitHaut(18)", " Diviseur(18)". - Le fichier comprend un nombre de variables équivalent au nombre de fenêtres à afficher sur le LCD, chaque variable comprend 37 octets. Chaque variable ici appelée "Ligne du Menu" ou "fenêtre" comprend: le texte à afficher sur les lignes du LCD ( Ligne1$ et Ligne2$ ), l'emplacement du caractère à faire clignoter ( MnuPosCur ) ou la position du curseur. Si la "Molette" de l'encodeur est tournée vers la droite ( Suite+ ) et que le nombre indiqué dans la colonne du tableau est plus petit que 128, on se déplace au numéro de ligne dans le "Menu" correspondant à ce nombre. Sinon, on exécute l'action 128 ( incrémente la valeur se trouvant sous le curseur ), par contre si la "Molette de l'encodeur est tournée vers la gauche ( Suite- ) et que le nombre indiqué dans la colonne du tableau est plus petit que 128, on se déplace au numéro de ligne dans le "Menu" correspondant à ce nombre. Sinon, on exécute l'action 129, c'est-à-dire ( décrémente la valeur se trouvant sous le curseur ), enfin si le "Bouton" est appuyé ( Return ) et que le nombre indiqué est plus petit que 128, on se déplace au numéro de ligne dans le "Menu" correspondant à ce nombre. Sinon, on exécute le "Code action" qui correspond au tableau de 18 éléments "Indice()", lequel est lié aux tableaux "LimitBas(18)", "LimitHaut(18)" et " Diviseur(18)". -------------------- Liste des variables: -------------------- MnuNum ' Numéro de la ligne dans "Menu" Ligne1 ' Texte à afficher sur la ligne 1 du LCD Ligne2 ' Texte à afficher sur la ligne 2 du LCD MnuPosCur ' Position du Curseur sur le LCD (Clignote ou fixe) MnuActHorlo ' Action à réaliser lorsque Molette tourne dans le sens horloger MnuActAntiH ' Action à réaliser lorsque Molette tourne dans le sens antihorlo MnuActRet ' Action à réaliser lorsque Bouton est appuyé MnuIndiVar ' Variable contenant la valeur de la cellule dans "Indice()" MnuAdres ' Adresse calculée dans la mémoire EEprom du micro-contrôleur BaseAdres ' Première adresse des Data "MENU" dans la mémoire EEprom TempoEnco ' Durée d'inaction dans le Menu, si dépassement = sortie du Menu JourPlage ' Jour de 1 à 7 correspondant au jour programmé (Lundi = 1) PlageWeek(28) ' 4 Cycles par jour X 7 jours semaine = 28 NumPlage(96) ' Numéro de plage de 1 à 96 X 4 Cycles HDebutPlage ' Heure de début de chauffage (hh:mm) par 1/4 heure DureePlage ' Durée de chauffage (hh:mm) par 1/4 heure JourSemaine ' Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche NumCycle(4) ' Numéro de Cycle de 1 à 4 TCycleJour(4) ' Température pour le cycle de Jour x 4 TCycleNuit(4) ' Température pour le cycle de nuit x 4 TypRegulation ' 0 = Chaudière, 1 = Vanne à 3 voies TypVanne ' 0 = vanne à positionement, 1 = vanne analogique Annee ' RTC + Affichage + Menu Mois ' RTC + Affichage + Menu JourDate ' RTC + Affichage + Menu Jour ' RTC + Affichage + Menu (Lundi = 1, Mardi = 2, ..., Dimanche = 7) Heure ' RTC + Affichage + Menu Minute ' RTC + Affichage + Menu Seconde ' RTC TempConsECS ' Température ECS TempMiniExt ' Température minimum extérieure (Voir table par régions) TempMaxiEau ' Température maximum eau ( Voir Constructeur de la chaudière) HysTempHab ' Hystérésis de la température de l'habitation HysTempEau ' Hystérésis de la température de l'eau des radiateurs HysTempECS ' Hystérésis de la température de l'ECS Valeur ' Variable de travail Indice() ' Tableau des 18 indices du "Menu" LimitBas() ' Tableau des Valeurs minimums autorisées LimitHaut() ' Tableau des Valeurs maximums autorisées Diviseur() ' Tableau des Diviseurs (pour faciliter l'échelle des grandeurs) Indice() " LimitBas() " LimitHaut() " Diviseur() " ------------------------+------------------+------------------+----------------+ Indice(1) = Annee LimitBas(1) = 0 LimitHaut(1) = 99 Diviseur(1) = 1 Indice(2) = Mois LimitBas(2) = 1 LimitHaut(2) = 12 Diviseur(2) = 1 Indice(3) = JourDate LimitBas(3) = 1 LimitHaut(3) = 31 Diviseur(3) = 1 Indice(4) = Heure LimitBas(4) = 0 LimitHaut(4) = 23 Diviseur(4) = 1 Indice(5) = Minute LimitBas(5) = 0 LimitHaut(5) = 59 Diviseur(5) = 1 Indice(6) = TempECS LimitBas(6) = 60 LimitHaut(6) = 85 Diviseur(6) = 1 Indice(7) = TempMiniExt LimitBas(7) = -30 LimitHaut(7) = 0 Diviseur(7) = 2 Indice(8) = TempMaxEau LimitBas(8) = 50 LimitHaut(8) = 90 Diviseur(8) = 1 Indice(9) = HysTempHab LimitBas(9) = 1 LimitHaut(9) = 10 Diviseur(9) = 10 Indice(10) = HysTempEau LimitBas(10)= 1 LimitHaut(10)= 10 Diviseur(10)= 2 Indice(11) = HysTempECS LimitBas(11)= 1 LimitHaut(11)= 10 Diviseur(11)= 2 Indice(12) = Cycle LimitBas(12)= 1 LimitHaut(12)= 4 Diviseur(12)= 1 Indice(13) = JourPlage LimitBas(13)= 1 LimitHaut(13)= 7 Diviseur(13)= 1 Indice(14) = NumPlage LimitBas(14)= 1 LimitHaut(14)= 96 Diviseur(14)= 1 Indice(15) = HDebutPlage LimitBas(15)= 1 LimitHaut(15)= 96 Diviseur(15)= 1 Indice(16) = DureePlage LimitBas(16)= 1 LimitHaut(16)= 96 Diviseur(16)= 1 Indice(17) = TCycleJour LimitBas(17)= 20 LimitHaut(17)= 50 Diviseur(17)= 2 Indice(18) = TCycleNuit LimitBas(18)= 20 LimitHaut(18)= 50 Diviseur(18)= 2 ------------------------+------------------+------------------+----------------+ Codes " Action " ------+---------------+ 128 + 129 - 130 Sortie (du Menu) 131 Cycle1 132 Cycle2 133 Cycle3 134 Cycle4 135 lundi (1) 136 mardi (2) 137 mercredi (3) 138 jeudi (4) 139 vendredi (5) 140 samedi (6) 141 dimanche (7) 142 Suppression de la plage sélectionnée 143 Vanne 3 voies – Digitale 144 Vanne 3 voies – Analogique Routine Principale: ------------------- TempoEnco = 0 ' Temporisation de contrôle d'activité MnuNum = 1 ' Première ligne du "Menu" (11a) Début de BOUCLE infinie Incrémente TempoEnco à chaque seconde Lecture de la mémoire à partir de MnuAdres = BaseAdres + 37 * (MnuNum - 1) Affichage Ligne1 = MnuAdres Affichage Ligne2 = MnuAdres + 16 MnuPosCur = MnuAdres + 32 MnuActHorlo = MnuAdres + 33 MnuActAntiH = MnuAdres + 34 MnuActRet = MnuAdres + 35 MnuIndiVar = MnuAdres + 36 Allumage du Rétro-éclairage Afficher les 2 lignes de 16 caractères sur le LCD Si MnuPosCur > 0 Afficher et positionner le Curseur à MnuPosCur Sinon Faire clignoter le caractère à la position correspondante à MnuPosCur FinSi Si Molette + ' Sens horlogique TempoEnco = 0 ' Réinitialisation du timer Si MnuActHorlo < 128 ' Si MnuActHorlo plus petit que 128 MnuNum = MnuActHorlo ' on va à la ligne du "Menu" = MnuNum Le caractère clignote à la position correspondante à MnuPosCur Sinon Le curseur est à la position correspondante à MnuPosCur Extraire la Valeur(Indice(MnuIndiVar)) Incrémente Valeur(Indice(MnuIndiVar)) Si Valeur(Indice(MnuIndiVar)) > LimitHaut Valeur(Indice(MnuIndiVar)) = LimitBas FinSi Valeur(Indice(MnuIndiVar)) = Valeur(Indice(MnuIndiVar))/Diviseur Afficher Valeur(Indice(MnuIndiVar)) ' Afficher valeur sur le LCD On va à la routine "Mise à jour Variable" FinSi Sinon Si Molette - ' Sens anti-horlogique TempoEnco = 0 ' Réinitialisation du timer Si MnuActAntiH < 128 ' Si MnuActAntiH plus petit que 128 MnuNum = MnuActAntiH ' on va à la ligne MnuNum Le caractère clignote à la position correspondante à MnuPosCur Sinon Le curseur est à la position correspondante à MnuPosCur Extraire la Valeur(Indice(MnuIndiVar)) Décrémente Valeur(Indice(MnuIndiVar)) Si Valeur(Indice(MnuIndiVar)) > LimitHaut Valeur(Indice(MnuIndiVar)) = LimitBas FinSi Valeur(Indice(MnuIndiVar)) = Valeur(Indice(MnuIndiVar))/Diviseur Afficher Valeur(Indice(MnuIndiVar)) ' Afficher valeur sur le LCD On va à la routine "Mise à jour Variable" FinSi Sinon Si Bouton appuyé ' Bouton au centre de la Molette TempoEnco = 0 ' Réinitialisation du timer Si MnuActRet = 130 SORTIE de la boucle de MENU ' On quitte le Menu, affichage normal Sinon Si MnuActRet < 128 ' Si Bouton appuyé et MnuActRet < 128 MnuNum = MnuActRet ' on se déplace à la ligne du Menu Sinon Si MnuActRet > ou = 131 et < ou = 134 Indice(12) = MnuActRet - 130 ' Sélection du Cycle de 1 à 4 Sinon Si MnuActRet > ou = 135 et < ou = 141 Indice(13) = MnuActRet - 134 ' Sélection du jour de la semaine MnuNum = 54 ' Après, on saute à la ligne 54 Sinon Si MnuActRet = 142 ' On efface les plages affichées (Suppression Plage en cours) MnuNum = 31 ' Après, on retourne à la ligne 31 Sinon Si MnuActRet > ou = 143 et < ou = 144 Vanne_3_voies = MnuActRet - 143 ' Sélection du Type de vanne utilisée, FinSi ' Vanne Ouvert/Fermer ou Analogique Sinon Si TempoEnco > 30 ' 30 secondes (peut être modifié) SORTIE de la boucle infinie ' On quitte le Menu, affichage normal FinSi Retour au début de la BOUCLE infinie Extinction du Rétro-éclairage Sortie et fin de la routine principale ====================================== Routine de "Mise à jour variable": ---------------------------------- Si MnuNum = 8 Annee = valeur ' (0 à 99) Sinon Si MnuNum = 9 Heure = Valeur ' (0 à 23) Sinon Si MnuNum = 18 Mois = Valeur ' (0 à 12) Sinon Si MnuNum = 19 Minute = Valeur ' (0 à 59) Sinon Si MnuNum = 20 TempECS = Valeur ' (60 à 85)/1 Sinon Si MnuNum = 21 HysTempHab = Valeur ' (1 à 10)/10 Sinon Si MnuNum = 32 JourDate = Valeur ' (1 à 31) Sinon Si MnuNum = 33 HysTempEau = Valeur ' (1 à 10)/2 Sinon Si MnuNum = 34 TempMiniExt = Valeur ' (-30 à 0)/2 Sinon Si MnuNum = 35 TempMaxiEau = Valeur ' (50 à 90)/1 Sinon Si MnuNum = 48 Cycle = Valeur ' (1 à 4)/1 ///NumPlage ' (1 à 96) ///JourPlage ' (1 à 7) /// HDebutPlage ' (0 à 96) /// DureePlage ' (1 à 96) Sinon Si MnuNum = 49 Cycle = Valeur ' (1 à 4) /// TCycleJour(Cycle) Sinon Si MnuNum = 50 Cycle = Valeur ' (1 à 4) /// TCycleNuit(Cycle) Sinon Si MnuNum = 51 HysTempECS = Valeur ' (1 à 10)/2 Sinon Si MnuNum = 54 JourSemaine = Valeur (JJJ) /// Début jj:mm calculé par 1/4 heure Sinon Si MnuNum = 55 JourSemaine = Valeur (JJJ) /// Durée / Heure début / Heure de fin Sinon Si MnuNum = 58 Cycle = Valeur (1 à 4) /// Sinon Si MnuNum = 59 Cycle = Valeur (1 à 4) /// FinSi Fin de la routine et retour dans la routine principale -------------------------------------------------------- Fichier Data à charger dans l'EEPROM du Micro-contrôleur. --------------------------------------------------------- Variables de 37 octets de longueur soit: 16 octets pour la Ligne1 LCD 16 octets pour la Ligne2 LCD 1 octet pour la Position Curseur 1 octet pour l'Action --> ( Molette sens horloger = 128) 1 octet pour l'Action <-- ( Molette sens anti-horloger = 129) 1 octet pour l'Action Return ( Bouton ) 1 octet pour l'Indice Variable, ceci nous donne 37 octets X 59 fenêtres = 2183 octets Fichier "MENU": +-+---------------+---------------+-------+------+------+------+------+ N°" ligne1 " Ligne2 "PosCur "Suite+"Suite-"Return"Indice" +-+---------------+---------------+-------+------+------+------+------+ 1