Horloge RTC
Dependencies: ihm_L476_full RTC_IUT
Diff: main.cpp
- Revision:
- 2:29559ef1623d
- Parent:
- 1:1e5f482dad5b
- Child:
- 3:69c53ab43e4e
--- a/main.cpp Tue May 19 20:00:04 2020 +0000 +++ b/main.cpp Sun May 24 14:42:33 2020 +0000 @@ -1,22 +1,102 @@ -#include "mbed.h" -DigitalOut ledR(PB_2); -DigitalOut ledG(PE_8); + +#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 + +// prototype et variables globales et constantes +void automate(void); +// + + int main() { - unsigned short compteur1=0,compteur2=0; - ledR=0; - ledG=0; - while (true) { - wait_ms(1); - compteur1++; - compteur2++ ; - if(compteur1>500) { - ledR=!ledR; - compteur1=0 ; - } - if(compteur2>1500) { - ledG=!ledG; - compteur2=0 ; - } + + 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 } } + + +void automate(void) +{ + // 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; + 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; + + // gestion des entrees + entree = BPC;// c'est le bouton centre + entreeb = BPB;// c'est le bouton bas + // 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) { + case etat0 : + minute = 0; //pour reset + temps.reset();//pour 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; + 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 + break; + case reset : + 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; + break; + + } + // valeurs des sorties en fonction de l'état actuel + switch(etat_actuel) { + + 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()) + 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 + 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 + 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 + 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()) + break; + + } +} \ No newline at end of file