Exemple d'automate en C

Dependencies:   mbed

automate.cpp

Committer:
gr66
Date:
2016-11-30
Revision:
2:63147e335ea8
Parent:
1:032d4021bf3a

File content as of revision 2:63147e335ea8:

//Projet a télécharger depuis : https://developer.mbed.org/teams/NBoard/code/Automate/
#include "mbed.h"
DigitalIn BP0 (PA_9,PullUp) ;  // bouton BP0
DigitalOut L0 (PB_3) ;  // led L0
DigitalOut L1 (PA_7) ;  // led L1
DigitalOut L2 (PA_6) ;  // led L2
// prototype et variables globales et constantes
// -------------------------------------
void automate(void);
//
void main(void)
{
    // début de l'application
    // ----------------------
    while(1) {
        wait(0.2); //on poiraute 200 miliseconde
        automate();
    }
}
void automate(void)
{
    // définition d'un type énuméré permettant de manipuler l'état de l'automate
    // par son nom
    // -------------------------------------------------------------------------
    typedef enum {etat0=0, etat1=1, etat2=2} type_etat;
    type_etat etat_actuel;
    static type_etat etat_futur=etat0;
    unsigned char entree;
    // gestion des entrees
    // -------------------
    entree = !BP0;
    // gestion du diagramme de transition
    // ----------------------------------
    etat_actuel = etat_futur;
    switch(etat_actuel) {
        case etat0 :
            if (entree==1) etat_futur = etat1;
            break;
        case etat1 :
            etat_futur = etat2;
            break;
        case etat2 :
            etat_futur = etat0;
            break;
    }
    // gestion des sorties
    // -------------------
    switch(etat_actuel) {
        case etat0 :
            L0=1;
            L1=0;
            L2=0;
            break;
        case etat1 :
            L0=1;
            L1=1;
            L2=0;
            break;
        case etat2 :
            L0=1;
            L1=1;
            L2=1;
            break;
    }
}