Template automate NUCLEO 446RE

Dependencies:   C12832-font

main.cpp

Committer:
gr91
Date:
2020-05-11
Revision:
0:219cbcb4f747
Child:
1:fb8116164c8f

File content as of revision 0:219cbcb4f747:

//Projet téléchargé depuis : https://os.mbed.com/teams/SNE-S1S2-prime/code/Mon_premier_automate/
//Université Paris-Saclay - IUT de Cachan
//SNE S1 Prime   GR DP mai 2020
//***********************************************//
#include "mbed.h"
DigitalIn BPC (PA_0,PullNone) ;  // bouton centre
DigitalOut LG (PE_8) ;  // led verte
DigitalOut LR (PB_2) ;  // led rouge

// prototype et variables globales et constantes
void automate(void);
//
int main()
{
    // début de l'application
    while(1) {
        wait(0.2);  //c'est la clock (5 Hz)
        automate(); // ce qui se produit sur top de clock
    }
}
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 = etat0 ;   // déclaration état actuel init. à etat0
    static type_etat etat_futur = etat0;  // déclaration état futur
    int entree;
    // gestion des entrees
    entree = BPC;  // c'est le bouton centre
    // gestion du diagramme de transition
    etat_actuel = etat_futur;   // mise à jour de l'état
    // calul de l'éat futur en fonction de l'état actuel et des entrées
    switch(etat_actuel) {
        case etat0 :
            if (entree) etat_futur = etat1;
            break;
        case etat1 :
            etat_futur = etat2;
            break;
        case etat2 :
            etat_futur = etat0;
            break;
    }
    // valeurs des  sorties en fonction de l'état actuel
    switch(etat_actuel) {
        case etat0 :
            LG=1;
            LR=1;
            break;
        case etat1 :
            LG=0;
            LR=1;
            break;
        case etat2 :
            LG=1;
            LR=0;
            break;
    }
}