Horloge RTC
Dependencies: ihm_L476_full RTC_IUT
main.cpp@2:29559ef1623d, 2020-05-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |