Horloge RTC

Dependencies:   ihm_L476_full RTC_IUT

Committer:
grimwald
Date:
Mon Jun 01 19:34:43 2020 +0000
Revision:
3:69c53ab43e4e
Parent:
2:29559ef1623d
Child:
4:86341306d9d7
chrono;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
grimwald 2:29559ef1623d 1
grimwald 2:29559ef1623d 2 #include "ihm_L476.h"
grimwald 2:29559ef1623d 3 DigitalIn BPC (PA_0,PullNone) ; // bouton centre
grimwald 2:29559ef1623d 4 DigitalIn BPB (PA_1,PullDown) ;//bouton down
grimwald 2:29559ef1623d 5 IHM_L476 ihm;//bibliotheque de l'afficheur
grimwald 3:69c53ab43e4e 6 Timer temps; //bibliotheque du chrono
grimwald 2:29559ef1623d 7
grimwald 2:29559ef1623d 8 // prototype et variables globales et constantes
grimwald 2:29559ef1623d 9 void automate(void);
grimwald 2:29559ef1623d 10 //
grimwald 2:29559ef1623d 11
grimwald 2:29559ef1623d 12
gr91 0:b4a900df72eb 13 int main()
gr91 0:b4a900df72eb 14 {
grimwald 2:29559ef1623d 15
grimwald 2:29559ef1623d 16 ihm.LCD_printf("CHRONO");
grimwald 2:29559ef1623d 17 // début de l'application
grimwald 2:29559ef1623d 18 while(1) {
grimwald 2:29559ef1623d 19 automate(); // ce qui se produit sur top de clock
gr91 1:1e5f482dad5b 20 }
gr91 0:b4a900df72eb 21 }
grimwald 2:29559ef1623d 22
grimwald 2:29559ef1623d 23
grimwald 2:29559ef1623d 24 void automate(void)
grimwald 2:29559ef1623d 25 {
grimwald 2:29559ef1623d 26 // définition d'un type énuméré permettant de manipuler l'état de l'automate
grimwald 2:29559ef1623d 27 // par son nom
grimwald 3:69c53ab43e4e 28 typedef enum {etat0=0,affichage=1, start=2, stop=3,lap=4,reset=5} type_etat;
grimwald 2:29559ef1623d 29 type_etat etat_actuel = etat0 ; // déclaration état actuel init. à etat0
grimwald 2:29559ef1623d 30 static type_etat etat_futur = etat0; // déclaration état futur
grimwald 2:29559ef1623d 31 int entree;
grimwald 2:29559ef1623d 32 int entreeb;
grimwald 3:69c53ab43e4e 33 static int minute;
grimwald 2:29559ef1623d 34
grimwald 2:29559ef1623d 35 // gestion des entrees
grimwald 2:29559ef1623d 36 entree = BPC;// c'est le bouton centre
grimwald 2:29559ef1623d 37 entreeb = BPB;// c'est le bouton bas
grimwald 2:29559ef1623d 38 // gestion du diagramme de transition
grimwald 2:29559ef1623d 39 etat_actuel = etat_futur; // mise à jour de l'état
grimwald 2:29559ef1623d 40 // calul de l'éat futur en fonction de l'état actuel et des entrées
grimwald 3:69c53ab43e4e 41
grimwald 2:29559ef1623d 42 switch(etat_actuel) {
grimwald 3:69c53ab43e4e 43 //les différents états en accord avec le diagramme de transition
grimwald 2:29559ef1623d 44 case etat0 :
grimwald 3:69c53ab43e4e 45 if (entreeb) etat_futur = reset;
grimwald 2:29559ef1623d 46 if (entree) etat_futur = start;
grimwald 2:29559ef1623d 47 break;
grimwald 3:69c53ab43e4e 48
grimwald 2:29559ef1623d 49 case start :
grimwald 2:29559ef1623d 50 temps.start();//pour demarrer le chrono
grimwald 3:69c53ab43e4e 51 if (!entree) etat_futur = affichage;
grimwald 2:29559ef1623d 52 break;
grimwald 3:69c53ab43e4e 53
grimwald 2:29559ef1623d 54 case stop :
grimwald 3:69c53ab43e4e 55 temps.stop();//pour stop le chrono
grimwald 3:69c53ab43e4e 56 if (!entree) etat_futur = etat0;
grimwald 2:29559ef1623d 57 break;
grimwald 3:69c53ab43e4e 58
grimwald 2:29559ef1623d 59 case reset :
grimwald 3:69c53ab43e4e 60 temps.reset();// pour reset le chrono
grimwald 3:69c53ab43e4e 61 if (!entreeb) etat_futur = etat0;
grimwald 2:29559ef1623d 62 break;
grimwald 3:69c53ab43e4e 63
grimwald 2:29559ef1623d 64 case lap :
grimwald 3:69c53ab43e4e 65 if (entreeb) etat_futur = affichage;
grimwald 3:69c53ab43e4e 66 break;
grimwald 3:69c53ab43e4e 67
grimwald 3:69c53ab43e4e 68 case affichage :
grimwald 3:69c53ab43e4e 69 if (entreeb) etat_futur = lap;
grimwald 3:69c53ab43e4e 70 if (entree) etat_futur = stop;
grimwald 2:29559ef1623d 71 break;
grimwald 2:29559ef1623d 72
grimwald 2:29559ef1623d 73 }
grimwald 2:29559ef1623d 74 // valeurs des sorties en fonction de l'état actuel
grimwald 2:29559ef1623d 75 switch(etat_actuel) {
grimwald 2:29559ef1623d 76
grimwald 2:29559ef1623d 77 case etat0 :
grimwald 2:29559ef1623d 78 ihm.BAR_set(0);
grimwald 3:69c53ab43e4e 79 ihm.LCD_printf("%02d:%05.2f",minute,temps.read()); //ihm.LCD_printf("%02d:%02d:%02d",temps.read_ms()) on peut utiliser une autre facon pour affiche le temps; //affiche le temps a zero
grimwald 2:29559ef1623d 80 break;
grimwald 3:69c53ab43e4e 81 case affichage :
grimwald 3:69c53ab43e4e 82 if(temps.read()>59.99){
grimwald 3:69c53ab43e4e 83 temps.reset(); // je reset les seconde a 0 et je rajoute une minute car 60s = 1 min //on peut faire autrement
grimwald 2:29559ef1623d 84 minute = minute +1;
grimwald 2:29559ef1623d 85 }
grimwald 2:29559ef1623d 86 ihm.BAR_set(1);//debug de l'état
grimwald 3:69c53ab43e4e 87 ihm.LCD_printf("%02d:%05.2f",minute,temps.read()); // affichage mis a jour du temps // affichage sur l'écran LCD
grimwald 3:69c53ab43e4e 88 break;
grimwald 3:69c53ab43e4e 89 case start :
grimwald 3:69c53ab43e4e 90 ihm.BAR_set(2);//debug de l'état
grimwald 3:69c53ab43e4e 91 ihm.LCD_printf("%02d:%05.2f",minute,temps.read()); // affichage sur l'écran LCD
grimwald 2:29559ef1623d 92 break;
grimwald 2:29559ef1623d 93 case stop :
grimwald 3:69c53ab43e4e 94 ihm.BAR_set(4);
grimwald 3:69c53ab43e4e 95 ihm.LCD_printf("%02d:%05.2f",minute,temps.read()); //affiche le temps figé pendant que le temps continue
grimwald 2:29559ef1623d 96 break;
grimwald 3:69c53ab43e4e 97 case lap :
grimwald 3:69c53ab43e4e 98 ihm.BAR_set(8);
grimwald 2:29559ef1623d 99 break;
grimwald 2:29559ef1623d 100 }
grimwald 2:29559ef1623d 101 }