Horloge RTC

Dependencies:   ihm_L476_full RTC_IUT

Committer:
grimwald
Date:
Mon Jul 27 12:35:15 2020 +0000
Revision:
5:6ce20ff7927b
Parent:
4:86341306d9d7
Child:
6:21be959149c3
post bus update;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
grimwald 4:86341306d9d7 1 #include "RTC_IUT.h"//bibliotheque de l'afficheur
grimwald 4:86341306d9d7 2 #include "ihm_L476.h"//bibliotheque du chrono
grimwald 5:6ce20ff7927b 3 DigitalIn BPC (PA_0,PullNone) ; // bouton centre
grimwald 4:86341306d9d7 4 DigitalIn BPL (PA_1,PullDown) ;//left
grimwald 4:86341306d9d7 5 DigitalIn BPR(PA_2,PullDown) ;//right
grimwald 4:86341306d9d7 6 DigitalIn BPU(PA_3,PullDown) ;//up
grimwald 4:86341306d9d7 7 DigitalIn BPD (PA_5,PullDown) ;//down
grimwald 4:86341306d9d7 8 DigitalOut LG (PE_8) ; // led verte
grimwald 4:86341306d9d7 9 DigitalOut LR (PB_2) ; // led rouge
grimwald 2:29559ef1623d 10
grimwald 4:86341306d9d7 11 IHM_L476 ihm; // on chosis des noms qui nous serviront a appelé les fonctions dans les bibliotheque
grimwald 5:6ce20ff7927b 12 Rtc rtc;
grimwald 4:86341306d9d7 13 time_t heure_t,minute_t,seconde_t;//on nomme nos valeur qui seront sous le format time_t
grimwald 2:29559ef1623d 14
grimwald 2:29559ef1623d 15 // prototype et variables globales et constantes
grimwald 4:86341306d9d7 16 static unsigned char Heure_t=23,Minute_t=59,Seconde_t = 50; // on defini l'heure avec une unsigned char
grimwald 4:86341306d9d7 17
grimwald 2:29559ef1623d 18 void automate(void);
grimwald 4:86341306d9d7 19
grimwald 2:29559ef1623d 20
grimwald 2:29559ef1623d 21
gr91 0:b4a900df72eb 22 int main()
gr91 0:b4a900df72eb 23 {
grimwald 4:86341306d9d7 24 rtc.SetHour(Heure_t);
grimwald 4:86341306d9d7 25 rtc.SetMin(Minute_t);// On initialise l'heure , les minutes et les secondes
grimwald 4:86341306d9d7 26 rtc.SetSec(Seconde_t);
grimwald 4:86341306d9d7 27 rtc.SetYear(2020);
grimwald 4:86341306d9d7 28 ihm.LCD_printf("CLOCK");
grimwald 2:29559ef1623d 29 // début de l'application
grimwald 2:29559ef1623d 30 while(1) {
grimwald 4:86341306d9d7 31 wait(0.1);
grimwald 2:29559ef1623d 32 automate(); // ce qui se produit sur top de clock
gr91 1:1e5f482dad5b 33 }
gr91 0:b4a900df72eb 34 }
grimwald 2:29559ef1623d 35
grimwald 2:29559ef1623d 36
grimwald 2:29559ef1623d 37 void automate(void)
grimwald 2:29559ef1623d 38 {
grimwald 2:29559ef1623d 39 // définition d'un type énuméré permettant de manipuler l'état de l'automate
grimwald 2:29559ef1623d 40 // par son nom
grimwald 5:6ce20ff7927b 41 typedef enum {affichage=0, Minutep =1, Minutem =2, Heurep= 3,Heurem =4,Calendrier=5,Jour+=6,Jour} type_etat;
grimwald 4:86341306d9d7 42 type_etat etat_actuel = affichage ; // déclaration état actuel init. à etat0
grimwald 4:86341306d9d7 43 static type_etat etat_futur = affichage; // déclaration état futur
grimwald 5:6ce20ff7927b 44 int entreeb, entreeh, entreeg, entreed , entree;
grimwald 4:86341306d9d7 45
grimwald 2:29559ef1623d 46 // gestion des entrees
grimwald 5:6ce20ff7927b 47 entree = BPC;// c'est le bouton centre
grimwald 4:86341306d9d7 48 entreeb = BPD;// c'est le bouton bas
grimwald 4:86341306d9d7 49 entreeh = BPU;
grimwald 4:86341306d9d7 50 entreeg = BPL;
grimwald 4:86341306d9d7 51 entreed = BPR;
grimwald 5:6ce20ff7927b 52
grimwald 2:29559ef1623d 53 // gestion du diagramme de transition
grimwald 2:29559ef1623d 54 etat_actuel = etat_futur; // mise à jour de l'état
grimwald 2:29559ef1623d 55 // calul de l'éat futur en fonction de l'état actuel et des entrées
grimwald 4:86341306d9d7 56
grimwald 4:86341306d9d7 57
grimwald 2:29559ef1623d 58 switch(etat_actuel) {
grimwald 3:69c53ab43e4e 59 //les différents états en accord avec le diagramme de transition
grimwald 4:86341306d9d7 60
grimwald 4:86341306d9d7 61
grimwald 4:86341306d9d7 62 case affichage :
grimwald 5:6ce20ff7927b 63 if(entreed)etat_futur= Minutep;//si j'appuie sur droite j'augmente les minute de 1
grimwald 5:6ce20ff7927b 64 if(entreeg)etat_futur=Minutem;//si j'appuie a gauche je diminue les minutes de
grimwald 5:6ce20ff7927b 65 if(entreeh)etat_futur=Heurep;//si j'appuie sur haut j'augmente les heures de 1
grimwald 4:86341306d9d7 66 if(entreeb)etat_futur=Heurem;//si j'appuie en bas je diminue les heures de 1
grimwald 5:6ce20ff7927b 67 if(entree)etat_futur=Calendrier;//si j'appuie je vais sur le calendrier
grimwald 4:86341306d9d7 68
grimwald 5:6ce20ff7927b 69 if(Minute_t > 59 ) { // si Minute_t depasse 59 minutes alors Minute_t reviens a 0 et j'incremente Heure_t de 1
grimwald 5:6ce20ff7927b 70 Minute_t=00;
grimwald 5:6ce20ff7927b 71 rtc.SetHour(Heure_t++);
grimwald 4:86341306d9d7 72 }
grimwald 4:86341306d9d7 73 if(Heure_t > 23 ) {//si Heure_t depasse 23 heures alors Heure_t reviens a 0
grimwald 4:86341306d9d7 74 Heure_t = 00;
grimwald 4:86341306d9d7 75 }
grimwald 5:6ce20ff7927b 76
grimwald 5:6ce20ff7927b 77 if(Seconde_t > 59 ) {// si Seconde_t depasse 59 secondes alors Secondes_t reviens a 0 et j'incremente Minute_t de 1
grimwald 4:86341306d9d7 78 Seconde_t = 00;
grimwald 4:86341306d9d7 79 rtc.SetMin(Minute_t++);
grimwald 4:86341306d9d7 80 }
grimwald 3:69c53ab43e4e 81 break;
grimwald 5:6ce20ff7927b 82
grimwald 5:6ce20ff7927b 83
grimwald 4:86341306d9d7 84 case Minutep:
grimwald 5:6ce20ff7927b 85 rtc.SetMin(Minute_t++); // j'incremente Minute_t
grimwald 4:86341306d9d7 86 rtc.SetSec(00);//je met les secondes a zero a chaque changement d'etat
grimwald 4:86341306d9d7 87 etat_futur = affichage;// je retourne a l'affichage
grimwald 4:86341306d9d7 88 break;
grimwald 4:86341306d9d7 89 case Minutem:
grimwald 4:86341306d9d7 90 rtc.SetMin(Minute_t--);//je diminue Minute_t
grimwald 4:86341306d9d7 91 rtc.SetSec(00);
grimwald 4:86341306d9d7 92 etat_futur = affichage;
grimwald 2:29559ef1623d 93 break;
grimwald 4:86341306d9d7 94
grimwald 4:86341306d9d7 95 case Heurep:
grimwald 4:86341306d9d7 96 rtc.SetHour(Heure_t++);//j'incremente Heure_t
grimwald 4:86341306d9d7 97 rtc.SetSec(00);
grimwald 4:86341306d9d7 98 etat_futur = affichage;
grimwald 4:86341306d9d7 99 break;
grimwald 4:86341306d9d7 100
grimwald 5:6ce20ff7927b 101 case Heurem :
grimwald 5:6ce20ff7927b 102 rtc.SetHour(Heure_t--);
grimwald 4:86341306d9d7 103 rtc.SetSec(00);
grimwald 4:86341306d9d7 104 etat_futur = affichage;
grimwald 4:86341306d9d7 105 break;
grimwald 5:6ce20ff7927b 106 case Calendrier:
grimwald 5:6ce20ff7927b 107 break;
grimwald 4:86341306d9d7 108
grimwald 4:86341306d9d7 109
grimwald 4:86341306d9d7 110
grimwald 4:86341306d9d7 111
grimwald 2:29559ef1623d 112 }
grimwald 2:29559ef1623d 113 // valeurs des sorties en fonction de l'état actuel
grimwald 2:29559ef1623d 114 switch(etat_actuel) {
grimwald 4:86341306d9d7 115
grimwald 4:86341306d9d7 116
grimwald 4:86341306d9d7 117
grimwald 4:86341306d9d7 118 case affichage :
grimwald 2:29559ef1623d 119 ihm.BAR_set(0);
grimwald 5:6ce20ff7927b 120 heure_t= rtc.GetHour();
grimwald 5:6ce20ff7927b 121 minute_t = rtc.GetMin();//J'utilise les valeurs qui ont été etablie avant et je les met dans des variables
grimwald 5:6ce20ff7927b 122 seconde_t = rtc.GetSec();
grimwald 4:86341306d9d7 123 ihm.LCD_printf("%02d:%02d:%02d",heure_t,minute_t,seconde_t);
grimwald 5:6ce20ff7927b 124 LG=0;// je met les leds a 0 pour un effet de clignotement
grimwald 4:86341306d9d7 125 LR=0;
grimwald 5:6ce20ff7927b 126
grimwald 2:29559ef1623d 127 break;
grimwald 4:86341306d9d7 128
grimwald 4:86341306d9d7 129
grimwald 4:86341306d9d7 130
grimwald 4:86341306d9d7 131 case Minutep :
grimwald 4:86341306d9d7 132 ihm.BAR_set(2);
grimwald 4:86341306d9d7 133 heure_t= rtc.GetHour();
grimwald 5:6ce20ff7927b 134 minute_t = rtc.GetMin();//J'utilise les valeurs qui ont été etablie avant et je les met dans des variables
grimwald 5:6ce20ff7927b 135 seconde_t = rtc.GetSec();
grimwald 5:6ce20ff7927b 136 ihm.LCD_printf("%02d:%02d:%02d",heure_t,minute_t,seconde_t);
grimwald 5:6ce20ff7927b 137 LG=1;// j'allume verte pour l'incrementation
grimwald 4:86341306d9d7 138 LR=0;
grimwald 4:86341306d9d7 139 break;
grimwald 4:86341306d9d7 140 case Minutem :
grimwald 4:86341306d9d7 141 ihm.BAR_set(2);
grimwald 4:86341306d9d7 142 ihm.LCD_printf("%02d:%02d:%02d",heure_t,minute_t,seconde_t);
grimwald 5:6ce20ff7927b 143 LG=0;// j'allume rouge pour la diminution
grimwald 4:86341306d9d7 144 LR=1;
grimwald 4:86341306d9d7 145 break;
grimwald 4:86341306d9d7 146 case Heurep :
grimwald 2:29559ef1623d 147 ihm.BAR_set(1);//debug de l'état
grimwald 4:86341306d9d7 148 ihm.LCD_printf("%02d:%02d:%02d",heure_t,minute_t,seconde_t);//affichage de l'heure en format 00:00:00
grimwald 5:6ce20ff7927b 149 LG=1;// j'allume verte pour l'incrementation
grimwald 5:6ce20ff7927b 150 LR=0;
grimwald 2:29559ef1623d 151 break;
grimwald 4:86341306d9d7 152
grimwald 4:86341306d9d7 153 case Heurem :
grimwald 4:86341306d9d7 154 ihm.BAR_set(1);
grimwald 4:86341306d9d7 155 ihm.LCD_printf("%02d:%02d:%02d",Heure_t,Minute_t,seconde_t);
grimwald 5:6ce20ff7927b 156 LG=0;
grimwald 4:86341306d9d7 157 LR=1;// j'allume rouge pour la diminution
grimwald 2:29559ef1623d 158 break;
grimwald 5:6ce20ff7927b 159 case Calendrier:
grimwald 5:6ce20ff7927b 160 break;
grimwald 4:86341306d9d7 161
grimwald 4:86341306d9d7 162
grimwald 4:86341306d9d7 163
grimwald 2:29559ef1623d 164 }
grimwald 2:29559ef1623d 165 }