Description pour MENU Ver1.5 - MICRO-INFO du 23/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 Modifications suite à la réunion du 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)", " Divise(18)", "Form(16)". - 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)", " Divise(18)" et "Form(16)". -------------------- 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) NumPlage ' Numéro de plage sera calculé dans le programme. 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 Divise() ' Tableau des diviseurs (pour faciliter l'échelle des grandeurs) Form() ' Tableau du format des variables. Le chiffre de gauche représente ' le nombre de chiffres, l'autre représente le nombre de décimale ' Form()=99 si affichage hh:mm Indice() " LimitBas() " LimitHaut() " Divise() " Form() " -----------------------+----------------+-----------------+-------------+----------+ Indice(1) = NumCycle LimitBas(1) = 1 LimitHaut(1) = 4 Divise(1) = 1 Form(1) =10 Indice(2) = JourPlage LimitBas(2) = 1 LimitHaut(2) = 7 Divise(2) = 1 Form(2) =10 Indice(3) = HysTempHab LimitBas(3) = 1 LimitHaut(3) = 10 Divise(3) =10 Form(3) =11 Indice(4) = HysTempEau LimitBas(4) = 1 LimitHaut(4) = 10 Divise(4) = 2 Form(4) =11 Indice(5) = HysTempECS LimitBas(5) = 1 LimitHaut(5) = 10 Divise(5) = 2 Form(5) =11 Indice(6) = Annee LimitBas(6) = 0 LimitHaut(6) = 99 Divise(6) = 1 Form(6) =20 Indice(7) = Mois LimitBas(7) = 1 LimitHaut(7) = 12 Divise(7) = 1 Form(7) =20 Indice(8) = JourDate LimitBas(8) = 1 LimitHaut(8) = 31 Divise(8) = 1 Form(8) =20 Indice(9) = Heure LimitBas(9) = 0 LimitHaut(9) = 23 Divise(9) = 1 Form(9) =20 Indice(10)= Minute LimitBas(10)= 0 LimitHaut(10)= 59 Divise(10)= 1 Form(10)=20 Indice(11)= TempECS LimitBas(11)= 60 LimitHaut(11)= 85 Divise(11)= 1 Form(11)=20 Indice(12)= TempMaxEau LimitBas(12)= 50 LimitHaut(12)= 90 Divise(12)= 1 Form(12)=20 Indice(13)= NumPlage LimitBas(13)= 1 LimitHaut(13)= 96 Divise(13)= 1 Form(13)=20 Indice(14)= TempMiniExt LimitBas(14)=-30 LimitHaut(14)= 0 Divise(14)= 2 Form(14)=20 Indice(15)= TCycleJour LimitBas(15)= 20 LimitHaut(15)= 50 Divise(15)= 2 Form(15)=21 Indice(16)= TCycleNuit LimitBas(16)= 20 LimitHaut(16)= 50 Divise(16)= 2 Form(16)=21 Indice(17)= HDebutPlage LimitBas(17)= 1 LimitHaut(17)= 96 Divise(17)= 1 Form(17)=99 Indice(18)= DureePlage LimitBas(18)= 1 LimitHaut(18)= 96 Divise(18)= 1 Form(18)=99 -----------------------+----------------+-----------------+-------------+-----------+ Codes " Action " ------+---------------+ 128 + 129 - 130 1 soit valeur de j = Sortie du Menu 131 1 soit Cycle1 132 2 soit Cycle2 133 3 soit Cycle3 134 4 soit Cycle4 135 1 soit lundi 136 2 soit mardi 137 3 soit mercredi 138 4 soit jeudi 139 5 soit vendredi 140 6 soit samedi 141 7 soit dimanche 142 Suppression de la plage sélectionnée 143 0 soit TypVanne = Digitale 144 1 soit TypVanne = 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 Incrémente Indice(MnuIndiVar) Si Indice(MnuIndiVar) > LimitHaut Indice(MnuIndiVar) = LimitBas FinSi Indice(MnuIndiVar) = Indice(MnuIndiVar)/Divise Afficher Indice(MnuIndiVar) ' Afficher valeur sur le LCD On va à la routine "MiseAJourVariable" 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 Décrémente Indice(MnuIndiVar) Si Indice(MnuIndiVar) > LimitHaut Indice(MnuIndiVar) = LimitBas FinSi Indice(MnuIndiVar) = Indice(MnuIndiVar)/Divise Afficher Indice(MnuIndiVar) ' Afficher valeur sur le LCD On va à la routine "MiseAJourVariable" 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(1) = MnuActRet - 130 ' Sélection du Cycle de 1 à 4 Sinon Si MnuActRet > ou = 135 et < ou = 141 Indice(2) = 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 "MiseAJourVariable": ------------------------------- 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