Chronometre simple start/stop/reset

Dependencies:   ihm_L476_full

Committer:
gr91
Date:
Sun Nov 01 21:42:30 2020 +0000
Revision:
2:49a91aed331b
Parent:
1:700e45a13a46
Chrono simple - mbed-os 5.14.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gr91 0:219cbcb4f747 1 //Projet téléchargé depuis : https://os.mbed.com/teams/SNE-S1S2-prime/code/Mon_premier_automate/
gr91 0:219cbcb4f747 2 //Université Paris-Saclay - IUT de Cachan
gr91 0:219cbcb4f747 3 //SNE S1 Prime GR DP mai 2020
gr91 0:219cbcb4f747 4 //***********************************************//
gr91 1:700e45a13a46 5 //#include "mbed.h" //
gr91 1:700e45a13a46 6 #include "ihm_L476.h"
gr91 0:219cbcb4f747 7 DigitalIn BPC (PA_0,PullNone) ; // bouton centre
gr91 1:700e45a13a46 8 DigitalIn DOWN (PA_5,PullDown) ; // bouton centre
gr91 0:219cbcb4f747 9 DigitalOut LG (PE_8) ; // led verte
gr91 0:219cbcb4f747 10 DigitalOut LR (PB_2) ; // led rouge
gr91 1:700e45a13a46 11 IHM_L476 ihm;
gr91 1:700e45a13a46 12 Serial pc(SERIAL_TX, SERIAL_RX);
gr91 1:700e45a13a46 13 Timer tt;
gr91 0:219cbcb4f747 14
gr91 0:219cbcb4f747 15 // prototype et variables globales et constantes
gr91 0:219cbcb4f747 16 void automate(void);
gr91 0:219cbcb4f747 17 //
gr91 1:700e45a13a46 18 void affich(void)
gr91 1:700e45a13a46 19 {
gr91 1:700e45a13a46 20 int ch=tt.read_ms()/10 ; // valeur en 1/100 de seconde
gr91 1:700e45a13a46 21 int cc=ch%100; // centièmes
gr91 1:700e45a13a46 22 int sst=ch/100;
gr91 1:700e45a13a46 23 int ss=sst%60;
gr91 1:700e45a13a46 24 int mm=sst/60;
gr91 1:700e45a13a46 25 ihm.LCD_printf("%02d:%02d:%02d",mm,ss,cc);
gr91 1:700e45a13a46 26 }
gr91 0:219cbcb4f747 27 int main()
gr91 0:219cbcb4f747 28 {
gr91 0:219cbcb4f747 29 // début de l'application
gr91 0:219cbcb4f747 30 while(1) {
gr91 1:700e45a13a46 31 wait(0.001); //c'est la clock
gr91 0:219cbcb4f747 32 automate(); // ce qui se produit sur top de clock
gr91 0:219cbcb4f747 33 }
gr91 0:219cbcb4f747 34 }
gr91 0:219cbcb4f747 35 void automate(void)
gr91 0:219cbcb4f747 36 {
gr91 0:219cbcb4f747 37 // définition d'un type énuméré permettant de manipuler l'état de l'automate
gr91 0:219cbcb4f747 38 // par son nom
gr91 1:700e45a13a46 39 typedef enum {etat0=0, etat1=1, etat2=2, etat3=3, reset=4} type_etat;
gr91 0:219cbcb4f747 40 type_etat etat_actuel = etat0 ; // déclaration état actuel init. à etat0
gr91 0:219cbcb4f747 41 static type_etat etat_futur = etat0; // déclaration état futur
gr91 1:700e45a13a46 42 int stst; // start stop
gr91 1:700e45a13a46 43 int rslp; // start stop
gr91 0:219cbcb4f747 44 // gestion des entrees
gr91 1:700e45a13a46 45 stst = BPC; // c'est le bouton centre
gr91 1:700e45a13a46 46 rslp = DOWN; //
gr91 0:219cbcb4f747 47 // gestion du diagramme de transition
gr91 0:219cbcb4f747 48 etat_actuel = etat_futur; // mise à jour de l'état
gr91 0:219cbcb4f747 49 // calul de l'éat futur en fonction de l'état actuel et des entrées
gr91 0:219cbcb4f747 50 switch(etat_actuel) {
gr91 0:219cbcb4f747 51 case etat0 :
gr91 1:700e45a13a46 52 if (stst) etat_futur = etat1;
gr91 1:700e45a13a46 53 if (rslp) etat_futur = reset;
gr91 0:219cbcb4f747 54 break;
gr91 0:219cbcb4f747 55 case etat1 :
gr91 1:700e45a13a46 56 if (!stst) etat_futur = etat2;
gr91 0:219cbcb4f747 57 break;
gr91 0:219cbcb4f747 58 case etat2 :
gr91 1:700e45a13a46 59 if (stst) etat_futur = etat3;
gr91 1:700e45a13a46 60 break;
gr91 1:700e45a13a46 61 case etat3 :
gr91 1:700e45a13a46 62 if (!stst) etat_futur = etat0;
gr91 1:700e45a13a46 63 break;
gr91 1:700e45a13a46 64 case reset :
gr91 0:219cbcb4f747 65 etat_futur = etat0;
gr91 0:219cbcb4f747 66 break;
gr91 0:219cbcb4f747 67 }
gr91 0:219cbcb4f747 68 // valeurs des sorties en fonction de l'état actuel
gr91 0:219cbcb4f747 69 switch(etat_actuel) {
gr91 0:219cbcb4f747 70 case etat0 :
gr91 1:700e45a13a46 71 ihm.BAR_set(0);
gr91 1:700e45a13a46 72 pc.printf("Etat 0 \r\n");
gr91 1:700e45a13a46 73 affich();
gr91 0:219cbcb4f747 74 LG=1;
gr91 0:219cbcb4f747 75 LR=1;
gr91 0:219cbcb4f747 76 break;
gr91 0:219cbcb4f747 77 case etat1 :
gr91 1:700e45a13a46 78 ihm.BAR_set(1);
gr91 1:700e45a13a46 79 pc.printf("Etat 1 \r\n");
gr91 1:700e45a13a46 80 tt.start();
gr91 1:700e45a13a46 81 affich();
gr91 0:219cbcb4f747 82 LG=0;
gr91 0:219cbcb4f747 83 LR=1;
gr91 0:219cbcb4f747 84 break;
gr91 0:219cbcb4f747 85 case etat2 :
gr91 1:700e45a13a46 86 ihm.BAR_set(2);
gr91 1:700e45a13a46 87 pc.printf("Etat 2 \r\n");
gr91 1:700e45a13a46 88 affich();
gr91 0:219cbcb4f747 89 LG=1;
gr91 0:219cbcb4f747 90 LR=0;
gr91 0:219cbcb4f747 91 break;
gr91 1:700e45a13a46 92 case etat3 :
gr91 1:700e45a13a46 93 ihm.BAR_set(3);
gr91 1:700e45a13a46 94 pc.printf("Etat 3 \r\n");
gr91 1:700e45a13a46 95 tt.stop();
gr91 1:700e45a13a46 96 affich();
gr91 1:700e45a13a46 97 LG=1;
gr91 1:700e45a13a46 98 LR=1;
gr91 1:700e45a13a46 99 break;
gr91 1:700e45a13a46 100 case reset :
gr91 1:700e45a13a46 101 ihm.BAR_set(4);
gr91 1:700e45a13a46 102 pc.printf("Etat 4 \r\n");
gr91 1:700e45a13a46 103 tt.reset();
gr91 1:700e45a13a46 104 affich();
gr91 1:700e45a13a46 105 LG=1;
gr91 1:700e45a13a46 106 LR=1;
gr91 1:700e45a13a46 107 break;
gr91 0:219cbcb4f747 108 }
gr91 0:219cbcb4f747 109 }