Horloge RTC
Dependencies: ihm_L476_full RTC_IUT
main.cpp
- Committer:
- grimwald
- Date:
- 2020-05-24
- Revision:
- 2:29559ef1623d
- Parent:
- 1:1e5f482dad5b
- Child:
- 3:69c53ab43e4e
File content as of revision 2:29559ef1623d:
#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() { 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; } }