Chronometre simple start/stop/reset

Dependencies:   ihm_L476_full

main.cpp

Committer:
gr91
Date:
2020-11-01
Revision:
2:49a91aed331b
Parent:
1:700e45a13a46

File content as of revision 2:49a91aed331b:

//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"  //
#include "ihm_L476.h"
DigitalIn BPC (PA_0,PullNone) ;  // bouton centre
DigitalIn DOWN (PA_5,PullDown) ;  // bouton centre
DigitalOut LG (PE_8) ;  // led verte
DigitalOut LR (PB_2) ;  // led rouge
IHM_L476 ihm;
Serial pc(SERIAL_TX, SERIAL_RX);
Timer tt;

// prototype et variables globales et constantes
void automate(void);
//
void affich(void)
{
    int ch=tt.read_ms()/10 ; // valeur en 1/100 de seconde
    int cc=ch%100;  // centièmes
    int sst=ch/100;
    int ss=sst%60;
    int mm=sst/60;
    ihm.LCD_printf("%02d:%02d:%02d",mm,ss,cc);
}
int main()
{
    // début de l'application
    while(1) {
        wait(0.001);  //c'est la clock
        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, etat3=3, reset=4} type_etat;
    type_etat etat_actuel = etat0 ;   // déclaration état actuel init. à etat0
    static type_etat etat_futur = etat0;  // déclaration état futur
    int stst;  // start stop
    int rslp;  // start stop
    // gestion des entrees
    stst = BPC;  // c'est le bouton centre
    rslp = DOWN; //
    // 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 (stst) etat_futur = etat1;
            if (rslp) etat_futur = reset;
            break;
        case etat1 :
            if (!stst) etat_futur = etat2;
            break;
        case etat2 :
            if (stst) etat_futur = etat3;
            break;
        case etat3 :
            if (!stst) etat_futur = etat0;
            break;
        case reset :
            etat_futur = etat0;
            break;
    }
    // valeurs des  sorties en fonction de l'état actuel
    switch(etat_actuel) {
        case etat0 :
            ihm.BAR_set(0);
            pc.printf("Etat 0 \r\n");
            affich();
            LG=1;
            LR=1;
            break;
        case etat1 :
            ihm.BAR_set(1);
            pc.printf("Etat 1 \r\n");
            tt.start();
            affich();
            LG=0;
            LR=1;
            break;
        case etat2 :
            ihm.BAR_set(2);
            pc.printf("Etat 2 \r\n");
           affich();
            LG=1;
            LR=0;
            break;
        case etat3 :
            ihm.BAR_set(3);
            pc.printf("Etat 3 \r\n");
            tt.stop();
            affich();
            LG=1;
            LR=1;
            break;
        case reset :
            ihm.BAR_set(4);
            pc.printf("Etat 4 \r\n");
            tt.reset();
            affich();
            LG=1;
            LR=1;
            break;
    }
}