Horloge RTC

Dependencies:   ihm_L476_full RTC_IUT

Committer:
grimwald
Date:
Sun May 24 14:42:33 2020 +0000
Revision:
2:29559ef1623d
Parent:
1:1e5f482dad5b
Child:
3:69c53ab43e4e
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 Serial pc(SERIAL_TX, SERIAL_RX);//liason série
grimwald 2:29559ef1623d 4 DigitalIn BPC (PA_0,PullNone) ; // bouton centre
grimwald 2:29559ef1623d 5 DigitalIn BPB (PA_1,PullDown) ;//bouton down
grimwald 2:29559ef1623d 6 DigitalOut LG (PE_8) ; // led verte
grimwald 2:29559ef1623d 7 DigitalOut LR (PB_2) ; // led rouge
grimwald 2:29559ef1623d 8
grimwald 2:29559ef1623d 9 IHM_L476 ihm;//bibliotheque de l'afficheur
grimwald 2:29559ef1623d 10 Timer temps,temps2; //bibliotheque du chrono
grimwald 2:29559ef1623d 11
grimwald 2:29559ef1623d 12 // prototype et variables globales et constantes
grimwald 2:29559ef1623d 13 void automate(void);
grimwald 2:29559ef1623d 14 //
grimwald 2:29559ef1623d 15
grimwald 2:29559ef1623d 16
gr91 0:b4a900df72eb 17 int main()
gr91 0:b4a900df72eb 18 {
grimwald 2:29559ef1623d 19
grimwald 2:29559ef1623d 20 ihm.LCD_printf("CHRONO");
grimwald 2:29559ef1623d 21 // début de l'application
grimwald 2:29559ef1623d 22 while(1) {
grimwald 2:29559ef1623d 23 wait(0.2); //c'est la clock (5 Hz)
grimwald 2:29559ef1623d 24 automate(); // ce qui se produit sur top de clock
gr91 1:1e5f482dad5b 25 }
gr91 0:b4a900df72eb 26 }
grimwald 2:29559ef1623d 27
grimwald 2:29559ef1623d 28
grimwald 2:29559ef1623d 29 void automate(void)
grimwald 2:29559ef1623d 30 {
grimwald 2:29559ef1623d 31 // définition d'un type énuméré permettant de manipuler l'état de l'automate
grimwald 2:29559ef1623d 32 // par son nom
grimwald 2:29559ef1623d 33 typedef enum {etat0=0, start=1, stop=2,reset=3,lap=4} type_etat;
grimwald 2:29559ef1623d 34 type_etat etat_actuel = etat0 ; // déclaration état actuel init. à etat0
grimwald 2:29559ef1623d 35 static type_etat etat_futur = etat0; // déclaration état futur
grimwald 2:29559ef1623d 36 static int minute = 0; // declaration de minute en static pour que la valeur ne soit pas réinitialiser
grimwald 2:29559ef1623d 37 int entree;
grimwald 2:29559ef1623d 38 int entreeb;
grimwald 2:29559ef1623d 39
grimwald 2:29559ef1623d 40 // gestion des entrees
grimwald 2:29559ef1623d 41 entree = BPC;// c'est le bouton centre
grimwald 2:29559ef1623d 42 entreeb = BPB;// c'est le bouton bas
grimwald 2:29559ef1623d 43 // gestion du diagramme de transition
grimwald 2:29559ef1623d 44 etat_actuel = etat_futur; // mise à jour de l'état
grimwald 2:29559ef1623d 45 // calul de l'éat futur en fonction de l'état actuel et des entrées
grimwald 2:29559ef1623d 46 switch(etat_actuel) {
grimwald 2:29559ef1623d 47 case etat0 :
grimwald 2:29559ef1623d 48 minute = 0; //pour reset
grimwald 2:29559ef1623d 49 temps.reset();//pour reset
grimwald 2:29559ef1623d 50 if (entree) etat_futur = start;
grimwald 2:29559ef1623d 51 break;
grimwald 2:29559ef1623d 52 case start :
grimwald 2:29559ef1623d 53 temps.start();//pour demarrer le chrono
grimwald 2:29559ef1623d 54 temps2=temps;//le temps2 recopie le temps de base
grimwald 2:29559ef1623d 55 if (entree) etat_futur = stop;
grimwald 2:29559ef1623d 56 if (entreeb) etat_futur = lap;
grimwald 2:29559ef1623d 57 break;
grimwald 2:29559ef1623d 58 case stop :
grimwald 2:29559ef1623d 59 temps.stop();
grimwald 2:29559ef1623d 60 if (entree) etat_futur = start;
grimwald 2:29559ef1623d 61 if (entreeb) etat_futur = reset; //si j'appui sur le bouton down quand le chrono est stoppé il se reset
grimwald 2:29559ef1623d 62 break;
grimwald 2:29559ef1623d 63 case reset :
grimwald 2:29559ef1623d 64 etat_futur = etat0;
grimwald 2:29559ef1623d 65 break;
grimwald 2:29559ef1623d 66 case lap :
grimwald 2:29559ef1623d 67 temps2.stop();//le temps 2 se met en pause (qui est la copie du temps de base)pendant que le temps de base continue
grimwald 2:29559ef1623d 68 if (entreeb) etat_futur = start;
grimwald 2:29559ef1623d 69 break;
grimwald 2:29559ef1623d 70
grimwald 2:29559ef1623d 71 }
grimwald 2:29559ef1623d 72 // valeurs des sorties en fonction de l'état actuel
grimwald 2:29559ef1623d 73 switch(etat_actuel) {
grimwald 2:29559ef1623d 74
grimwald 2:29559ef1623d 75 case etat0 :
grimwald 2:29559ef1623d 76 ihm.BAR_set(0);
grimwald 2:29559ef1623d 77 ihm.LCD_printf("%02d.%05.2f",minute,temps.read());//affiche le temps a zero
grimwald 2:29559ef1623d 78 pc.printf("%02d.%05.2f\r\n",minute,temps.read())
grimwald 2:29559ef1623d 79 break;
grimwald 2:29559ef1623d 80 case start :
grimwald 2:29559ef1623d 81 if(temps.read()>59.99){
grimwald 2:29559ef1623d 82 temps.reset(); // je reset les seconde a 0 et je rajoute une minute car 60s = 1 min
grimwald 2:29559ef1623d 83 minute = minute +1;
grimwald 2:29559ef1623d 84 }
grimwald 2:29559ef1623d 85
grimwald 2:29559ef1623d 86 ihm.BAR_set(1);//debug de l'état
grimwald 2:29559ef1623d 87 ihm.LCD_printf("%02d.%05.2f",minute,temps.read()); // affichage mis a jour du temps // affichage sur l'écran LCD
grimwald 2:29559ef1623d 88 pc.printf("%02d.%05.2f \r\n",minute,temps.read()); // affichage sur pc
grimwald 2:29559ef1623d 89 break;
grimwald 2:29559ef1623d 90 case stop :
grimwald 2:29559ef1623d 91 ihm.BAR_set(2);//debug de l'état
grimwald 2:29559ef1623d 92 ihm.LCD_printf("%02d.%05.2f",minute,temps.read()); // affichage sur l'écran LCD
grimwald 2:29559ef1623d 93 pc.printf("%02d.%05.2f\r\n",minute,temps.read()); // affichage du temps en pause // affichage sur pc
grimwald 2:29559ef1623d 94 break;
grimwald 2:29559ef1623d 95 case lap :
grimwald 2:29559ef1623d 96 ihm.BAR_set(4);
grimwald 2:29559ef1623d 97 ihm.LCD_printf("%02d.%05.2f",minute,temps2.read()); //affiche le temps figé pendant que le temps continue
grimwald 2:29559ef1623d 98 pc.printf("%02d.%05.2f\r\n",minute,temps2.read())
grimwald 2:29559ef1623d 99 break;
grimwald 2:29559ef1623d 100
grimwald 2:29559ef1623d 101 }
grimwald 2:29559ef1623d 102 }