Template automate DISCO
Dependencies: ihm_L476_full
main.cpp@0:219cbcb4f747, 2020-05-11 (annotated)
- Committer:
- gr91
- Date:
- Mon May 11 13:18:47 2020 +0000
- Revision:
- 0:219cbcb4f747
- Child:
- 1:fb8116164c8f
Mon premier automate Rev0
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 | 0:219cbcb4f747 | 5 | #include "mbed.h" |
gr91 | 0:219cbcb4f747 | 6 | DigitalIn BPC (PA_0,PullNone) ; // bouton centre |
gr91 | 0:219cbcb4f747 | 7 | DigitalOut LG (PE_8) ; // led verte |
gr91 | 0:219cbcb4f747 | 8 | DigitalOut LR (PB_2) ; // led rouge |
gr91 | 0:219cbcb4f747 | 9 | |
gr91 | 0:219cbcb4f747 | 10 | // prototype et variables globales et constantes |
gr91 | 0:219cbcb4f747 | 11 | void automate(void); |
gr91 | 0:219cbcb4f747 | 12 | // |
gr91 | 0:219cbcb4f747 | 13 | int main() |
gr91 | 0:219cbcb4f747 | 14 | { |
gr91 | 0:219cbcb4f747 | 15 | // début de l'application |
gr91 | 0:219cbcb4f747 | 16 | while(1) { |
gr91 | 0:219cbcb4f747 | 17 | wait(0.2); //c'est la clock (5 Hz) |
gr91 | 0:219cbcb4f747 | 18 | automate(); // ce qui se produit sur top de clock |
gr91 | 0:219cbcb4f747 | 19 | } |
gr91 | 0:219cbcb4f747 | 20 | } |
gr91 | 0:219cbcb4f747 | 21 | void automate(void) |
gr91 | 0:219cbcb4f747 | 22 | { |
gr91 | 0:219cbcb4f747 | 23 | // définition d'un type énuméré permettant de manipuler l'état de l'automate |
gr91 | 0:219cbcb4f747 | 24 | // par son nom |
gr91 | 0:219cbcb4f747 | 25 | typedef enum {etat0=0, etat1=1, etat2=2} type_etat; |
gr91 | 0:219cbcb4f747 | 26 | type_etat etat_actuel = etat0 ; // déclaration état actuel init. à etat0 |
gr91 | 0:219cbcb4f747 | 27 | static type_etat etat_futur = etat0; // déclaration état futur |
gr91 | 0:219cbcb4f747 | 28 | int entree; |
gr91 | 0:219cbcb4f747 | 29 | // gestion des entrees |
gr91 | 0:219cbcb4f747 | 30 | entree = BPC; // c'est le bouton centre |
gr91 | 0:219cbcb4f747 | 31 | // gestion du diagramme de transition |
gr91 | 0:219cbcb4f747 | 32 | etat_actuel = etat_futur; // mise à jour de l'état |
gr91 | 0:219cbcb4f747 | 33 | // calul de l'éat futur en fonction de l'état actuel et des entrées |
gr91 | 0:219cbcb4f747 | 34 | switch(etat_actuel) { |
gr91 | 0:219cbcb4f747 | 35 | case etat0 : |
gr91 | 0:219cbcb4f747 | 36 | if (entree) etat_futur = etat1; |
gr91 | 0:219cbcb4f747 | 37 | break; |
gr91 | 0:219cbcb4f747 | 38 | case etat1 : |
gr91 | 0:219cbcb4f747 | 39 | etat_futur = etat2; |
gr91 | 0:219cbcb4f747 | 40 | break; |
gr91 | 0:219cbcb4f747 | 41 | case etat2 : |
gr91 | 0:219cbcb4f747 | 42 | etat_futur = etat0; |
gr91 | 0:219cbcb4f747 | 43 | break; |
gr91 | 0:219cbcb4f747 | 44 | } |
gr91 | 0:219cbcb4f747 | 45 | // valeurs des sorties en fonction de l'état actuel |
gr91 | 0:219cbcb4f747 | 46 | switch(etat_actuel) { |
gr91 | 0:219cbcb4f747 | 47 | case etat0 : |
gr91 | 0:219cbcb4f747 | 48 | LG=1; |
gr91 | 0:219cbcb4f747 | 49 | LR=1; |
gr91 | 0:219cbcb4f747 | 50 | break; |
gr91 | 0:219cbcb4f747 | 51 | case etat1 : |
gr91 | 0:219cbcb4f747 | 52 | LG=0; |
gr91 | 0:219cbcb4f747 | 53 | LR=1; |
gr91 | 0:219cbcb4f747 | 54 | break; |
gr91 | 0:219cbcb4f747 | 55 | case etat2 : |
gr91 | 0:219cbcb4f747 | 56 | LG=1; |
gr91 | 0:219cbcb4f747 | 57 | LR=0; |
gr91 | 0:219cbcb4f747 | 58 | break; |
gr91 | 0:219cbcb4f747 | 59 | } |
gr91 | 0:219cbcb4f747 | 60 | } |