Chronometre simple start/stop/reset
Dependencies: ihm_L476_full
main.cpp@2:49a91aed331b, 2020-11-01 (annotated)
- 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?
User | Revision | Line number | New 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 | } |