Description pour MENU Ver1.3 - MICRO-INFO du 02/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 marquées par §. 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 à droite de la valeur à modifier. Construction et explication du "Menu". -------------------------------------- Le "MENU" est composé d'un "Code Actions", de "Tableaux" et d'un fichier chargé en EEprom. - Les "Codes Action" vont de 128 à 144. (Voir ci-dessous). - Les Tableaux sont: "Indice(16)", "LimitBas(16)", "LimitHaut(16)", " Diviseur(16)". - Le fichier comprend un nombre de variables équivalent au nombre de fenêtres à afficher, chaque variable comprend 38 octets. Chaque variable "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 (PosClig), la position du curseur (PosCur), si l'encodeur est tourné vers la droite (Suite+) et que le nombre indiqué est plus petit que 128, on se déplace au numéro de la ligne de "Menu" correspondant à ce nombre. Sinon, on exécute l'action 128 ( incrémente la valeur se trouvant sous le curseur ), si l'encodeur est tourné vers la gauche (Suite-) et que le nombre indiqué est plus petit que 128, on se déplace au numéro de la ligne de "Menu" correspondant à ce nombre. Sinon, on exécute l'action 129 (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 la ligne de "Menu" correspondant à ce nombre. Sinon, on exécute le "Code action" qui correspond au tableau "Indices de Menu" de 16 éléments lesquels sont liés aux tableaux "LimitBas(16)", "LimitHaut(16)", " Diviseur(16)". -------------------- Liste des variables: -------------------- MnuNum ' Numéro de la ligne du Menu Ligne1 ' Texte à afficher sur la ligne 1 du LCD Ligne2 ' Texte à afficher sur la ligne 2 du LCD MnuPosClig ' Premier caractère clignotant du mot sur le LCD MnuPosCur ' Position du Curseur sur le LCD MnuActHorlo ' Action à réaliser lorsque Molette tourne dans le sens horloger MnuActAntiH ' Action à réaliser lorsque Molette tourne dans le sens antihorloger MnuActRet ' Action à réaliser lorsque Bouton est appuyé MnuIndiVar ' Valeur de l'indice Menu() MnuAdres ' Position dans la mémoire du micro-contrôleur BaseAdres ' Première position des Data "MENU" dans la mémoire TempoEnco ' Durée d'inaction dans le Menu, si dépassement = sortie du Menu JourPlage ' Jour de 1 à 7 correspondant au jour programmé NumPlage ' Numéro de plage de 1 à 96 HDebutPlage ' Heure de début de chauffage DureePlage ' Durée de chauffage Cycle ' Numéro de Cycle de 1 à 4 Annee ' RTC + Affichage + Menu Mois ' RTC + Affichage + Menu JourDate ' RTC + Affichage + Menu JourSemaine ' RTC + Affichage + Menu Heure ' RTC + Affichage + Menu Minute ' RTC + Affichage + Menu Seconde ' RTC TempECS ' Température ECS TempMiniExt ' Température TempMaxiEau ' Température 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 ' Valeur lue dans l'eeprom de la variable à modifier et à réécrire Indice() ' Tableau de 16 indices du "Menu" LimitBas() ' Valeur minimum autorisée LimitHaut() ' Valeur maximum autorisée Diviseur() ' Diviseur de la valeur pour faciliter l'échelle des grandeurs Indices de MENU() " 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) = Jour 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 ----------------------+------------------+------------------+----------------+ 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 MENU: ------------- TempoEnco = 0 ' Tempo si pas d'activité de l'encodeur MnuNum = 1 ' Premier élément du Menu (11a) Début de BOUCLE Lecture de la mémoire à partir de MnuAdres = BaseAdres + 38 * (MnuNum - 1) Affichage Ligne1 = MnuAdres Affichage Ligne2 = MnuAdres + 16 MnuPosClig = MnuAdres + 32 MnuPosCur = MnuAdres + 33 MnuActHorlo = MnuAdres + 34 MnuActAntiH = MnuAdres + 35 MnuActRet = MnuAdres + 36 MnuIndiVar = MnuAdres + 37 Allumage du Rétro-éclairage Afficher les 2 lignes de 16 caractères sur le LCD IF MnuPosCur > 0 Afficher et positionner le Curseur à MnuPosCur ELSE Faire clignoter le caractère à MnuPosClig ENDIF IF Molette + ' Sens horlogique TempoEnco = 0 ' Réinitialisation du timer IF MnuActHorlo < 128 ' Si MnuActHorlo plus petit que 128 MnuNum = MnuActHorlo ' on va à la ligne du Menu suivant la ELSE ' valeur de MnuActHorlo, sinon, § Extraire la Valeur(Menu(MnuIndiVar)) § Incrémente Valeur(Menu(MnuIndiVar)) § IF Valeur(Menu(MnuIndiVar)) > LimitHaut § Valeur(Menu(MnuIndiVar)) = LimitBas ENDIF § Valeur(Menu(MnuIndiVar)) = Valeur(Menu(MnuIndiVar))/Diviseur § Afficher Valeur(Menu(MnuIndiVar)) ENDIF ELSE IF Molette - ' Sens anti-horlogique TempoEnco = 0 ' Réinitialisation du timer IF MnuActAntiH < 128 ' Si MnuActAntiH plus petit que 128 MnuNum = MnuActAntiH ' on va à la ligne du Menu suivant la ELSE ' valeur de MnuActAntiH, sinon, § Extraire la Valeur(Menu(MnuIndiVar)) § Décrémente Valeur(Menu(MnuIndiVar)) § IF Valeur(Menu(MnuIndiVar)) > LimitHaut § Valeur(Menu(MnuIndiVar)) = LimitBas ENDIF § Valeur(Menu(MnuIndiVar)) = Valeur(Menu(MnuIndiVar))/Diviseur § Afficher Valeur(Menu(MnuIndiVar)) ' Afficher nouvelle valeur sur le LCD ENDIF § Ecrire dans l'EEprom, la nouvelle Valeur(Menu(MnuIndiVar)) ELSE IF Bouton appuyé ' Bouton au centre de la Molette TempoEnco = 0 ' Réinitialisation du timer IF MnuActRet = 130 SORTIE de la boucle de MENU ' On quitte le Menu, affichage normal ELSE IF MnuActRet < 128 ' Si Bouton appuyé et MnuActRet < 128 MnuNum = MnuActRet ' on se déplace à la ligne du Menu ELSE IF MnuActRet > ou = 131 et < ou = 134 Menu(12) = MnuActRet - 130 ' Sélection du Cycle de 1 à 4 ELSE IF MnuActRet > ou = 135 et < ou = 141 Menu(13) = MnuActRet - 134 ' Sélection du jour de la semaine ELSE IF MnuActRet = 142 ' On efface les plages affichées (Suppression Plage en cours) MnuNum = 31 ' Après, on retourne à la ligne 31 ELSE IF MnuActRet > ou = 143 et < ou = 144 Vanne_3_voies = MnuActRet - 143 ' Sélection du Type de vanne utilisée, ENDIF ' Vanne Ouvert/Fermer ou Analogique ELSE IF TempoEnco > que la valeur présélectionnée (équivalente à 30 secondes) SORTIE de la boucle de MENU ' On quitte le Menu, affichage normal ENDIF Retour Début de BOUCLE Extinction du Rétro-éclairage Fin de routine --------------------------------------------------------- Fichier Data à charger dans l'EEPROM du Micro-contrôleur. --------------------------------------------------------- Variables de 38 octets de longueur soit: 16 octets pour la Ligne1 LCD 16 octets pour la Ligne2 LCD 1 octet pour Position clignotante du 1er caractère de l'option affichée 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 38 octets X 59 fenêtres = 2242 octets Note: Les '.' sont à supprimer et remplacer par des espaces et les numéros de lignes sont seulement là à titre indicatif. +-+---------------+---------------+-------+------+------+------+------+------+ N°" ligne1 " Ligne2 "PosClig"PosCur"Suite+"Suite-"Return"Indice" +-+---------------+---------------+-------+------+------+------+------+------+ 1PROGRAMME.DATE.H 017 000 002 005 006 000 2DATE.HEURE.REGLA 017 000 003 001 008 000 3HEURE.REGLAGES.S 017 000 004 002 009 000 4REGLAGES.SORTIE. 017 000 005 003 010 000 5SORTIE.PROGRAMME 017 000 001 004 130 000 6CHOIX_CYCLE.SORT 017 000 007 007 014 000 7SORTIE.CHOIX_CYC 017 000 006 006 005 000 8DATE............jj/mm/aaaa...... 026 026 128 129 018 001 9HEURE...........HH:MM........... 018 018 128 129 019 004 10TEMPERATURE_ECS. 017 000 011 013 020 000 11HYSTERESIS.PARAM 017 000 012 010 021 000 12PARAMETRES.SORTI 017 000 013 011 022 000 13SORTIE.TEMPERATU 017 000 010 012 005 000 14CYCLE1.CYCLE2.CY 017 000 015 017 131 000 15CYCLE2.CYCLE3.CY 017 000 016 014 132 000 16CYCLE3.CYCLE4.CY 017 000 017 015 133 000 17CYCLE4.CYCLE1.CY 017 000 014 016 134 000 18DATE............jj/mm/aaaa...... 021 021 128 129 032 002 19HEURE...........HH:MM........... 021 021 128 129 005 005 20TEMPERATURE_ECS.65°C............ 018 018 128 129 011 006 21HYSTERESIS_TEMP_AMBIANTE = 0,2°C 028 030 128 129 033 009 22T_MINI_EXTERIEUR 017 000 023 025 034 000 23T_MAXI_CHAUDIERE 017 000 024 022 035 000 24TYPE_REGULATION. 017 000 025 023 036 000 25SORTIE.T_MINI_EX 017 000 022 024 013 000 26SELECTION.AJOUT_ 017 000 027 031 038 000 27AJOUT_PLAGE.EDIT 017 000 028 026 040 000 28EDITER_CYCLE.TEM 017 000 029 027 048 000 29TEMP_JOUR.TEMP_N 017 000 030 028 049 000 30TEMP_NUIT.SORTIE 017 000 031 029 050 000 31SORTIE.SELECTION 017 000 026 030 007 000 32DATE............jj/mm/aaaa...... 018 018 128 129 003 003 33HYSTERESIS_TEMP_RADIATEUR= 0,5°C 030 030 128 129 051 010 34TEMPERATURE_MINIEXTERIEUR= -09°C 030 030 128 129 023 007 35TEMPERATURE_MAXICHAUDIERE = 80°C 030 030 128 129 025 008 36TYPE_REGULATION>CHAUDIERE.VANNE_ 017 000 037 037 025 000 37TYPE_REGULATION>VANNE_3_VOIES.CH 017 000 036 036 052 000 38SELECTION.CYCLExOUI..........NON 017 000 039 039 130 012 39SELECTION.CYCLExOUI..........NON 030 000 038 038 007 000 40LUNDI.MARDI.MERC 017 000 041 047 135 013 41MARDI.MERCREDI.J 017 000 042 040 136 013 42MERCREDI.JEUDI.V 017 000 043 041 137 013 43JEUDI.VENDREDI.S 017 000 044 042 138 013 44VENDREDI.SAMEDI. 017 000 045 043 139 013 45SAMEDI.DIMANCHE. 017 000 046 044 140 013 46DIMANCHE.SORTIE. 017 000 047 045 141 013 47SORTIE.LUNDI.MAR 017 000 040 046 031 000 48CYCLEx...PLAGExxJJJ.HH:MM.hh:mm. 015 016 128 129 056 014 49CYCLEx.TEMP_JOUR20,5°C.......... 020 020 128 129 031 000 50CYCLEx.TEMP_NUIT17,5°C.......... 020 020 128 129 031 000 51HYSTERESIS_TEMP_ECS = 0,5°C..... 025 025 128 129 012 011 52OUVRIR/FERMER.AN 017 000 053 053 143 000 53ANALOGIQUE.OUVRI 017 000 052 052 144 000 54JJJ.............DEBUT.A.hh:mm... 029 029 128 129 055 015 55JJJ........hh:mmDE.hh:mm.A.hh:mm 016 016 128 129 058 016 56SUPPRIMER.PLAGE.OUI..........NON 017 000 057 057 031 000 57SUPPRIMER.PLAGE.OUI..........NON 030 000 056 056 142 000 58CYCLEx..........CONTINUER.SORTIE 017 000 059 059 027 000 59CYCLEx..........CONTINUER.SORTIE 027 000 058 058 047 000 -----------------+----------------+-------+-------+-----+-------+-----+------+ ***** FIN **********************************************************************