Horloge RTC
Dependencies: ihm_L476_full RTC_IUT
Diff: main.cpp
- Revision:
- 3:69c53ab43e4e
- Parent:
- 2:29559ef1623d
- Child:
- 4:86341306d9d7
diff -r 29559ef1623d -r 69c53ab43e4e main.cpp --- a/main.cpp Sun May 24 14:42:33 2020 +0000 +++ b/main.cpp Mon Jun 01 19:34:43 2020 +0000 @@ -1,13 +1,9 @@ #include "ihm_L476.h" -Serial pc(SERIAL_TX, SERIAL_RX);//liason série DigitalIn BPC (PA_0,PullNone) ; // bouton centre DigitalIn BPB (PA_1,PullDown) ;//bouton down -DigitalOut LG (PE_8) ; // led verte -DigitalOut LR (PB_2) ; // led rouge - IHM_L476 ihm;//bibliotheque de l'afficheur -Timer temps,temps2; //bibliotheque du chrono +Timer temps; //bibliotheque du chrono // prototype et variables globales et constantes void automate(void); @@ -20,7 +16,6 @@ ihm.LCD_printf("CHRONO"); // début de l'application while(1) { - wait(0.2); //c'est la clock (5 Hz) automate(); // ce qui se produit sur top de clock } } @@ -30,12 +25,12 @@ { // définition d'un type énuméré permettant de manipuler l'état de l'automate // par son nom - typedef enum {etat0=0, start=1, stop=2,reset=3,lap=4} type_etat; + typedef enum {etat0=0,affichage=1, start=2, stop=3,lap=4,reset=5} type_etat; type_etat etat_actuel = etat0 ; // déclaration état actuel init. à etat0 static type_etat etat_futur = etat0; // déclaration état futur - static int minute = 0; // declaration de minute en static pour que la valeur ne soit pas réinitialiser int entree; int entreeb; + static int minute; // gestion des entrees entree = BPC;// c'est le bouton centre @@ -43,29 +38,36 @@ // gestion du diagramme de transition etat_actuel = etat_futur; // mise à jour de l'état // calul de l'éat futur en fonction de l'état actuel et des entrées + switch(etat_actuel) { + //les différents états en accord avec le diagramme de transition case etat0 : - minute = 0; //pour reset - temps.reset();//pour reset + if (entreeb) etat_futur = reset; if (entree) etat_futur = start; break; + case start : temps.start();//pour demarrer le chrono - temps2=temps;//le temps2 recopie le temps de base - if (entree) etat_futur = stop; - if (entreeb) etat_futur = lap; + if (!entree) etat_futur = affichage; break; + case stop : - temps.stop(); - if (entree) etat_futur = start; - if (entreeb) etat_futur = reset; //si j'appui sur le bouton down quand le chrono est stoppé il se reset + temps.stop();//pour stop le chrono + if (!entree) etat_futur = etat0; break; + case reset : - etat_futur = etat0; + temps.reset();// pour reset le chrono + if (!entreeb) etat_futur = etat0; break; + case lap : - temps2.stop();//le temps 2 se met en pause (qui est la copie du temps de base)pendant que le temps de base continue - if (entreeb) etat_futur = start; + if (entreeb) etat_futur = affichage; + break; + + case affichage : + if (entreeb) etat_futur = lap; + if (entree) etat_futur = stop; break; } @@ -74,29 +76,26 @@ case etat0 : ihm.BAR_set(0); - ihm.LCD_printf("%02d.%05.2f",minute,temps.read());//affiche le temps a zero - pc.printf("%02d.%05.2f\r\n",minute,temps.read()) + 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 break; - case start : - if(temps.read()>59.99){ - temps.reset(); // je reset les seconde a 0 et je rajoute une minute car 60s = 1 min + case affichage : + if(temps.read()>59.99){ + temps.reset(); // je reset les seconde a 0 et je rajoute une minute car 60s = 1 min //on peut faire autrement minute = minute +1; } - ihm.BAR_set(1);//debug de l'état - ihm.LCD_printf("%02d.%05.2f",minute,temps.read()); // affichage mis a jour du temps // affichage sur l'écran LCD - pc.printf("%02d.%05.2f \r\n",minute,temps.read()); // affichage sur pc + ihm.LCD_printf("%02d:%05.2f",minute,temps.read()); // affichage mis a jour du temps // affichage sur l'écran LCD + break; + case start : + ihm.BAR_set(2);//debug de l'état + ihm.LCD_printf("%02d:%05.2f",minute,temps.read()); // affichage sur l'écran LCD break; case stop : - ihm.BAR_set(2);//debug de l'état - ihm.LCD_printf("%02d.%05.2f",minute,temps.read()); // affichage sur l'écran LCD - pc.printf("%02d.%05.2f\r\n",minute,temps.read()); // affichage du temps en pause // affichage sur pc + ihm.BAR_set(4); + ihm.LCD_printf("%02d:%05.2f",minute,temps.read()); //affiche le temps figé pendant que le temps continue break; - case lap : - ihm.BAR_set(4); - ihm.LCD_printf("%02d.%05.2f",minute,temps2.read()); //affiche le temps figé pendant que le temps continue - pc.printf("%02d.%05.2f\r\n",minute,temps2.read()) + case lap : + ihm.BAR_set(8); break; - } } \ No newline at end of file