Exemple d'automate en C

Dependencies:   mbed

Committer:
gr66
Date:
Wed Nov 30 12:49:14 2016 +0000
Revision:
2:63147e335ea8
Parent:
1:032d4021bf3a
V3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gr66 2:63147e335ea8 1 //Projet a télécharger depuis : https://developer.mbed.org/teams/NBoard/code/Automate/
gr66 1:032d4021bf3a 2 #include "mbed.h"
gr66 1:032d4021bf3a 3 DigitalIn BP0 (PA_9,PullUp) ; // bouton BP0
gr66 1:032d4021bf3a 4 DigitalOut L0 (PB_3) ; // led L0
gr66 1:032d4021bf3a 5 DigitalOut L1 (PA_7) ; // led L1
gr66 1:032d4021bf3a 6 DigitalOut L2 (PA_6) ; // led L2
gr66 1:032d4021bf3a 7 // prototype et variables globales et constantes
gr66 1:032d4021bf3a 8 // -------------------------------------
gr66 1:032d4021bf3a 9 void automate(void);
gr66 1:032d4021bf3a 10 //
gr66 1:032d4021bf3a 11 void main(void)
gr66 1:032d4021bf3a 12 {
gr66 1:032d4021bf3a 13 // début de l'application
gr66 1:032d4021bf3a 14 // ----------------------
gr66 1:032d4021bf3a 15 while(1) {
gr66 1:032d4021bf3a 16 wait(0.2); //on poiraute 200 miliseconde
gr66 1:032d4021bf3a 17 automate();
gr66 1:032d4021bf3a 18 }
gr66 1:032d4021bf3a 19 }
gr66 1:032d4021bf3a 20 void automate(void)
gr66 1:032d4021bf3a 21 {
gr66 1:032d4021bf3a 22 // définition d'un type énuméré permettant de manipuler l'état de l'automate
gr66 1:032d4021bf3a 23 // par son nom
gr66 1:032d4021bf3a 24 // -------------------------------------------------------------------------
gr66 1:032d4021bf3a 25 typedef enum {etat0=0, etat1=1, etat2=2} type_etat;
gr66 1:032d4021bf3a 26 type_etat etat_actuel;
gr66 1:032d4021bf3a 27 static type_etat etat_futur=etat0;
gr66 1:032d4021bf3a 28 unsigned char entree;
gr66 1:032d4021bf3a 29 // gestion des entrees
gr66 1:032d4021bf3a 30 // -------------------
gr66 1:032d4021bf3a 31 entree = !BP0;
gr66 1:032d4021bf3a 32 // gestion du diagramme de transition
gr66 1:032d4021bf3a 33 // ----------------------------------
gr66 1:032d4021bf3a 34 etat_actuel = etat_futur;
gr66 1:032d4021bf3a 35 switch(etat_actuel) {
gr66 1:032d4021bf3a 36 case etat0 :
gr66 1:032d4021bf3a 37 if (entree==1) etat_futur = etat1;
gr66 1:032d4021bf3a 38 break;
gr66 1:032d4021bf3a 39 case etat1 :
gr66 1:032d4021bf3a 40 etat_futur = etat2;
gr66 1:032d4021bf3a 41 break;
gr66 1:032d4021bf3a 42 case etat2 :
gr66 1:032d4021bf3a 43 etat_futur = etat0;
gr66 1:032d4021bf3a 44 break;
gr66 1:032d4021bf3a 45 }
gr66 1:032d4021bf3a 46 // gestion des sorties
gr66 1:032d4021bf3a 47 // -------------------
gr66 1:032d4021bf3a 48 switch(etat_actuel) {
gr66 1:032d4021bf3a 49 case etat0 :
gr66 1:032d4021bf3a 50 L0=1;
gr66 1:032d4021bf3a 51 L1=0;
gr66 1:032d4021bf3a 52 L2=0;
gr66 1:032d4021bf3a 53 break;
gr66 1:032d4021bf3a 54 case etat1 :
gr66 1:032d4021bf3a 55 L0=1;
gr66 1:032d4021bf3a 56 L1=1;
gr66 1:032d4021bf3a 57 L2=0;
gr66 1:032d4021bf3a 58 break;
gr66 1:032d4021bf3a 59 case etat2 :
gr66 1:032d4021bf3a 60 L0=1;
gr66 1:032d4021bf3a 61 L1=1;
gr66 1:032d4021bf3a 62 L2=1;
gr66 1:032d4021bf3a 63 break;
gr66 1:032d4021bf3a 64 }
gr66 1:032d4021bf3a 65 }