Template automate NUCLEO 446RE

Dependencies:   C12832-font

main.cpp

Committer:
gr91
Date:
2020-11-16
Revision:
2:51380e17562c
Parent:
1:fb8116164c8f

File content as of revision 2:51380e17562c:

//Université Paris-Saclay - IUT de Cachan
//SNE S2 Prime   GR DP nov 2020
//***********************************************//
#include "mbed.h"
#include "C12832.h"
C12832 lcd(D11, D13, D12, D7, D10);
Ticker horloge_automate;
//
DigitalIn BPC (D4) ;  // bouton centre
DigitalOut LG (D9) ;  // led verte
DigitalOut LR (D5) ;  // led rouge

// prototype et variables globales et constantes
void automate(void);
int horloge_automate_flag=0;

void horloge_automate_isr(void)
{
    horloge_automate_flag=1;
}
//
int main()
{
    horloge_automate.attach(&horloge_automate_isr,0.1);
    lcd.cls();          
    lcd.locate(0,3);    
    lcd.printf("Automate");
    while(1) {
        if(horloge_automate_flag) {
            automate();
            horloge_automate_flag=0;
        }
    }
}
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 :
            lcd.locate(0,12);
            lcd.printf("Etat 0");
            LG=1;
            LR=1;
            break;
        case etat1 :
            lcd.locate(0,12);
            lcd.printf("Etat 1");
            LG=0;
            LR=1;
            break;
        case etat2 :
            lcd.locate(0,12);
            lcd.printf("Etat 2");
            LG=1;
            LR=0;
            break;
    }
}