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" +-+---------------+---------------+-------+------+------+------+------+------+ 1