' Programmation structurée pour le MENU. - Version: 1.0 du 08/02/2011 ' -------------------------------------- BEGIN ' Initvar ' ------- ' Description : Définition et initialisation des variables ' Variables d'entrées : Aucune ' Variables de sorties : Toutes les variables du programme ' Variables de travail : Aucune ' Sousroutines appellées : Aucune SUB Initvar ' Début de la routine DECLARE K AS BIT ' Variable de travail DECLARE RetroLcd AS BIT ' 1=ON, 0=OFF - Cde du rétroéclairage du LCD DECLARE Bouton As BIT ' Lecture du Bouton (0 = repos, 1 = Appuyé) DECLARE MoletteA As BIT ' Sortie A de l'encodeur Int0 et Int1 DECLARE MoletteB As BIT ' Sortie B de l'encodeur DECLARE PompeChau AS BIT ' 1 = ON, 0 = OFF - Commande du relais + Led1 DECLARE PompeECS AS BIT ' 1 = ON, 0 = OFF - Commande du relais + Led2 DECLARE BruleurVanne AS BIT ' 1 = ON, 0 = OFF - Commande du relais + Led3 DECLARE Vanne AS BIT ' 1 = ON, 0 = OFF - Commande du relais + Led4 DECLARE TypeVanne AS BIT ' 0= vanne à positionement, 1= vanne analogique DECLARE Plage AS BIT ' Si on est dans une plage programmée, Plage = 1 DECLARE StartCourbe AS BIT ' 0 ou 1, car il faut minimum un cycle avant de ' pouvoir optimiser la courbe de chauffe DECLARE Jb AS BYTE ' Variable de travail DECLARE Annee As BYTE ' de 0 à 99 DECLARE Mois As BYTE ' de 1 à 12 DECLARE Jour As BYTE ' de 1 à 31 suivant les mois DECLARE Heure As BYTE ' de 0 à 23 DECLARE Minute As BYTE ' de 0 à 59 DECLARE TempECS As BYTE ' Température ECS DECLARE TempMiniExt As BYTE ' Température minimim extérieure (fichier XLS) DECLARE TempMaxEau As BYTE ' Température maximum chaudière (Constructeur) DECLARE HysTempHab As BYTE ' Hystérésis température habitation DECLARE HysTempEau As BYTE ' Hystérésis température eau radiateur DECLARE HysTempECS As BYTE ' Hystérésis température eau ECS DECLARE Cycle As BYTE ' Numéro de cycle (1 à 4) DECLARE JourPlage As BYTE ' Jour correspondant à la plage horaire DECLARE NumPlage As BYTE ' Numéro de plage horaire DECLARE HDebutPlage As BYTE ' Heure de début de plage horaire DECLARE DureePlage As BYTE ' Durée de la plage horaire DECLARE Tmpsrebond As BYTE ' Constante pour antirebond DECLARE TempoBtn AS BYTE ' Définis la longueur d'appuis sur Bouton DECLARE TempoEnco AS BYTE ' Détermine la durée d'inactivité de l'Encodeur DECLARE MnuAdresse AS BYTE ' Adresse dans le Menu (1 à 59) DECLARE TempExtMoy AS BYTE ' Température extérieure moyenne sur 24 heures DECLARE TempIntMoy AS BYTE ' Température intérieure moyenne sur 24 heures DECLARE TempEau1 AS BYTE ' Val.maxi donnée par le constructeur du chauff. DECLARE MnuPosVidInv AS BYTE ' Menu Adresse + 32 DECLARE MnuLongVidInv AS BYTE ' Menu Adresse + 33 DECLARE MnuPosCurs AS BYTE ' Menu Adresse + 34 DECLARE MnuActHorlo AS BYTE ' Menu Adresse + 35 DECLARE MnuActAntihor AS BYTE ' Menu Adresse + 36 DECLARE MnuActRet AS BYTE ' Menu Adresse + 37 DECLARE MnuIndiVar AS BYTE ' Menu Adresse + 38 DECLARE MnuPosCur AS BYTE ' Position du curseur lors des entrées (1 à 32) ' La ligne 1 de 1 à 16 et la ligne 2 de 17 à 32 DECLARE Iw AS WORD ' Variable de travail DECLARE TempInt AS WORD ' Température intérieure de l'habitation DECLARE TempExt AS WORD ' Température extérieure DECLARE TempEau AS WORD ' Température d'eau départ circuit de chauffage DECLARE TempECS AS WORD ' Température d'eau chaude sanitaire DECLARE TempCons AS WORD ' Température de consigne suivant le MODE DECLARE Jour$(7) AS ALPHA ' Les 7 jours de la semaine (8 Chars) DECLARE Ligne1$ AS ALPHA ' Première ligne d'affichage du LCD (16 Chars) DECLARE Ligne2$ AS ALPHA ' Deuxième ligne d'affichage du LCD (16 Chars) DECLARE Menu$(16) AS ALPHA ' Matrice contenant les correspondances Menu DECLARE Compteur AS INTEGER ' Définition du compteur DECLARE CompteurOld AS INTEGER ' Définition du compteur avec ancienne valeur DECLARE TempExt1 AS INTEGER ' Valeur donnée par le tableau des températures ' Initialisation des constantes (peuvent être modifiées à l'aide du MENU) ' ***************************** LET TempConsJour = 20 ' Température de consigne Jour LET TempConsNuit = 17,5 ' Température de consigne Nuit LET TempConsECS = 60 ' Température de consigne ECS LET TempExt1 = -9 ' Température Minimum Extérieure LET TempEau1 = 80 ' Température Maximum de la chaudière LET HysTempEau = 5 ' Hystérésis de température d'eau chaudiére LET HysTempHab = 0,5 ' Hystérésis de température de l'habitation LET HysTempECS = 5 ' Hystérésis de température ECS LET Regulation = 0 ' 0= régulation chaudière, 1= vanne à 3 voies LET TypeVanne = 0 ' 0= vanne à positionement, 1= vanne analogique ' ' Initialisation des variables ' **************************** LET k = 0 LET Jb = 0 LET Iw = 0 LET CycleChau = 0 LET StartCourbe = 0 LET CyclePompe = 0 LET Compteur = 0 ' Valeur du compteur LET Bouton = 0 ' Valeur de Bouton au repos LET RetroLcd = 0 ' Rétro-éclairage du LCD est éteint LET Tmpsrebond = 2 ' Défintion de la pause antirebond (à ajuster) LET Ligne1$ = " " LET Ligne2$ = " " LET Menu$(1) = "Annee" LET Menu$(2) = "Mois" LET Menu$(3) = "Jour" LET Menu$(4) = "Heure" LET Menu$(5) = "Minute" LET Menu$(6) = "TempECS" LET Menu$(7) = "TempMiniExt" LET Menu$(8) = "TempMaxEau" LET Menu$(9) = "HysTempHab" LET Menu$(10) = "HysTempEau" LET Menu$(11) = "HysTempECS" LET Menu$(12) = "Cycle" LET Menu$(13) = "JourPlage" LET Menu$(14) = "NumPlage" LET Menu$(15) = "HDebutPlage" LET Menu$(16) = "DureePlage" LET Jour$(1) = "LUNDI" LET Jour$(2) = "MARDI" LET Jour$(3) = "MERCREDI" LET Jour$(4) = "JEUDI" LET Jour$(5) = "VENDREDI" LET Jour$(6) = "SAMEDI" LET Jour$(7) = "DIMANCHE" ENDSUB ' ' ****************************************************************************** ' Initmicro ' --------- ' Description : Initialisation du micro-contrôleur et création des "Alias" ' qui déterminerons les connexions hardwares du système et ' qui seront définies ici comme des simples variables. ' ' Variables d'entrées : Aucune ' Variables de sorties : Aucune ' Variables de travail : Aucune ' Sousroutines appellées : Aucune ' SUB Initmicro LET Bouton = PortA.3 ' Liaison du "Bouton" de l'encodeur à l'AtMega LET MoletteA = PortA.2 ' Liaison de "Molette" de l'encodeur à l'AtMega LET MoletteB = PortA.1 ' Liaison de "Molette" de l'encodeur à l'AtMega ENDSUB ' ****************************************************************************** ' Début du programme ' ------------------ LET Ligne1$ = "Micro-Info asbl " ' Définition de la première ligne LET Ligne2$ = " MENU V 1.0 " ' Définition de la seconde ligne ' Effacement de l'écran GOSUB Affilcd ' Affichage des 2 lignes ' Petite pause LET Ligne1$ = " " ' Première ligne à 16 blancs LET Ligne2$ = " " ' Deuxième ligne à 16 blancs ' Effacement de l'écran GOSUB Affilcd ' Affichage des 2 lignes MnuNum = 1 ' Preset le début du Menu (11a) DO WHILE Jb = Jb ' Début de la boucle infinie LET MnuAdresse = Adresse de Base + 39 * (Menu_Num - 1) LET Ligne1$ = MnuAdresse LET Ligne2$ = MnuAdresse + 16 LET MnuPosVidInv = MnuAdresse + 32 LET MnuLongVidInv = MnuAdresse + 33 LET MnuPosCur = MnuAdresse + 34 LET MnuActHorlo = MnuAdresse + 35 LET MnuActAntihor = MnuAdresse + 36 LET MnuActRet = MnuAdresse + 37 LET MnuIndiVar = MnuAdresse + 38 LET RetroLcd = 1 ' Allumage du Rétro-éclairage GOSUB Affilcd ' Affichage des 2 lignes IF Compteur > CompteurOld THEN ' Sens horlogique IF MnuActHorlo < 128 THEN LET MnuNum = MnuActHorlo ELSE LET Menu(MnuIndiVar) + 1 ENDIF ELSEIF Compteur < CompteurOld THEN ' Sens anti-horlogique IF MnuActAntihor < 128 THEN LET MnuNum = MnuActAntihor ELSE LET Menu(MnuIndiVar) - 1 ENDIF ELSEIF Bouton = 1 THEN ' Bouton au centre de la Molette IF MnuActRet = 130 THEN ' On quitte le Menu, affichage normal ELSEIF MnuActRet < 128 THEN LET MnuNum = MnuActRet ELSEIF MnuActRet > OR = 131 AND MnuActRet < OR = 134 THEN LET Menu(12) = MnuActRet - 130 ELSEIF MnuActRet > OR = 135 AND MnuActRet < OR = 141 THEN LET Menu(13) = MnuActRet - 134 ELSEIF MnuActRet = 142 THEN ELSEIF MnuActRet > OR = 143 AND MnuActRet < OR = 144 THEN LET TypeVanne = MnuActRet - 143 ENDIF ENDIF ENDDO ' Fin de la boucle infinie LET RetroLcd = 0 ' Extinction du Rétro-éclairage END ' ****************************************************************************** ' Sous-routines ' ------------- ' DetectA ' ------- ' Description : Détecte les mouvements de l'encodeur (Molette) ' Variables d'entrées : MoletteA, MoletteB ' Variables de sorties : Compteur ' Variables de travail : Tmpsrebond ' Sousroutines appellées : Aucune SUB DetectA IF MoletteB = MoletteA THEN ' Test si B est égal à A LET Compteur = Compteur - 1 ' Alors Sens AntiHorlogique ELSE ' Sinon LET Compteur = Compteur + 1 ' Sens Horlogique ENDIF ' Fin du test de A et de B ENDSUB ' ****************************************************************************** ' AffiLCD ' ------- ' Description : Affichage des chaînes Ligne1$ et Ligne2$ sur l'écran LCD ' Variables d'entrées : Ligne1$, Ligne2$ ' Variables de sorties : Aucune ' Variables de travail : Aucune ' Sousroutines appellées : Aucune SUB Affilcd ' Début de la routine ' Affichage de la première ligne ' Affichage de la seconde ligne ENDSUB ' ****************************************************************************** ' Mémoire MENU -------------- PROGRAMME DATE H00000017000000090000000000000002000000050000000600000000 DATE HEURE REGLA00000017000000040000000000000003000000010000000800000000 HEURE REGLAGES S00000017000000050000000000000004000000020000000900000000 REGLAGES SORTIE 00000017000000080000000000000005000000030000001000000000 SORTIE PROGRAMME00000017000000060000000000000001000000040000013000000000 CHOIX_CYCLE SORT00000017000000110000000000000007000000070000001400000000 SORTIE CHOIX_CYC00000017000000060000000000000006000000060000000500000000 DATE jj/mm/aaaa 00000025000000020000002600000128000001290000001800000001 HEURE HH:MM 00000017000000020000001800000128000001290000001900000004 TEMPERATURE_ECS 00000017000000150000000000000011000000130000002000000000 HYSTERESIS PARAM00000017000000100000000000000012000000100000002100000000 PARAMETRES SORTI00000017000000100000000000000013000000110000002200000000 SORTIE TEMPERATU00000017000000060000000000000010000000120000000500000000 CYCLE1 CYCLE2 CY00000017000000060000000000000015000000170000013100000000 CYCLE2 CYCLE3 CY00000017000000060000000000000016000000140000013200000000 CYCLE3 CYCLE4 CY00000017000000060000000000000017000000150000013300000000 CYCLE4 CYCLE1 CY00000017000000060000000000000014000000160000013400000000 DATE jj/mm/aaaa 00000020000000020000002100000128000001290000003200000002 HEURE HH:MM 00000020000000020000002100000128000001290000000500000005 TEMPERATURE_ECS 65°C 00000017000000020000001700000128000001290000001100000006 HYSTERESIS_TEMP_AMBIANTE = 0,2°C00000028000000030000003000000128000001290000003300000009 T_MINI_EXTERIEUR00000017000000160000000000000023000000250000003400000000 T_MAXI_CHAUDIERE00000017000000160000000000000024000000220000003500000000 TYPE_REGULATION 00000017000000150000000000000025000000230000003600000000 SORTIE T_MINI_EX00000017000000060000000000000022000000240000001300000000 SELECTION AJOUT_00000017000000090000000000000027000000310000003800000000 AJOUT_PLAGE EDIT00000017000000110000000000000028000000260000004000000000 EDITER_CYCLE TEM00000017000000120000000000000029000000270000004800000000 TEMP_JOUR TEMP_N00000017000000090000000000000030000000280000004900000000 TEMP_NUIT SORTIE00000017000000090000000000000031000000290000005000000000 SORTIE SELECTION00000017000000060000000000000026000000300000000700000000 DATE jj/mm/aaaa 00000017000000020000001800000128000001290000000300000003 HYSTERESIS_TEMP_RADIATEUR= 0,5°C00000028000000030000003000000128000001290000005100000010 TEMPERATURE_MINIEXTERIEUR= -09°C00000028000000030000003000000128000001290000002300000007 TEMPERATURE_MAXICHAUDIERE = 80°C00000029000000020000003000000128000001290000002500000008 TYPE_REGULATION>CHAUDIERE VANNE_00000017000000090000000000000037000000370000002500000000 TYPE_REGULATION>VANNE_3_VOIES CH00000017000000130000000000000036000000360000005200000000 SELECTION CYCLExOUI NON00000017000000030000000000000039000000390000013000000012 SELECTION CYCLExOUI NON00000030000000030000000000000038000000380000000700000000 LUNDI MARDI MERC00000017000000050000000000000041000000470000013500000013 MARDI MERCREDI J00000017000000050000000000000042000000400000013600000013 MERCREDI JEUDI V00000017000000080000000000000043000000410000013700000013 JEUDI VENDREDI S00000017000000050000000000000044000000420000013800000013 VENDREDI SAMEDI 00000017000000080000000000000045000000430000013900000013 SAMEDI DIMANCHE 00000017000000060000000000000046000000440000014000000013 DIMANCHE SORTIE 00000017000000080000000000000047000000450000014100000013 SORTIE LUNDI MAR00000017000000060000000000000040000000460000003100000000 CYCLEx PLAGExxJJJ HH:MM hh:mm 00000015000000020000001600000128000001290000005600000014 CYCLEx TEMP_JOUR20,5°C 00000017000000040000002000000128000001290000003100000000 CYCLEx TEMP_NUIT17,5°C 00000017000000040000002000000128000001290000003100000000 HYSTERESIS_TEMP_ECS = 0,5°C 00000023000000030000002500000128000001290000001200000011 OUVRIR/FERMER AN00000017000000130000000000000053000000530000014300000000 ANALOGIQUE OUVRI00000017000000100000000000000052000000520000014400000000 JJJ DEBUT A hh:mm 00000025000000050000002900000128000001290000005500000015 JJJ hh:mmDE hh:mm A hh:mm00000012000000050000001600000128000001290000005800000016 SUPPRIMER PLAGE OUI NON00000017000000030000000000000057000000570000003100000000 SUPPRIMER PLAGE OUI NON00000030000000030000000000000056000000560000014200000000 CYCLEx CONTINUER SORTIE00000017000000090000000000000059000000590000002700000000 CYCLEx CONTINUER SORTIE00000027000000060000000000000058000000580000004700000000 ***** END ******************************************************************************