Travaille effectué lors du deuxieme tp d'informatique.

Dependencies:   C12832

main.cpp

Committer:
lauric
Date:
2021-03-31
Revision:
7:232b7abac027
Parent:
6:f8cb706c480c

File content as of revision 7:232b7abac027:

#include "mbed.h"                  //Définition Mbde
#include "C12832.h"                //Librairie du LCD

#define RED 0b100
#define GREEN 0b010
#define BLUE 0b001
#define BLACK 0b000

DigitalIn fire(D4);          //Joystick fire
DigitalOut LED_rouge(D5);    //Led rouge
DigitalOut LED_bleue(D8);    //Led Bleue
DigitalOut LED_verte(D9);    //Led Verte
Timer timer;
Ticker ticker;
C12832 lcd(D11, D13, D12, D7, D10); //Broches pour LCD définies par la librairie C12832

int last_state;
int begin; // Temps

int etat_ledVerte = 0, etat = 1;

int getFireState();
bool isElapsedTime(int time);
void setColor(int rgb);

void func_ticker()
{
    etat_ledVerte = !etat_ledVerte;
}


int main()
{
    lcd.cls();
    timer.start();

    setColor(BLACK);

    while(true) {

        lcd.locate(20, 20);
        lcd.printf("Etat %d", etat);

        switch(etat) {
            case 1:

                if(getFireState() == 2) {
                    setColor(RED);
                    etat = 2;
                    begin = timer.read_ms();
                }

                break;
            case 2:

                if(isElapsedTime(5000)) {
                    etat = 1;
                    setColor(BLACK);
                } else if(getFireState() == 2) {
                    begin = timer.read_ms();
                    setColor(BLACK);
                    etat = 3;
                    ticker.attach(&func_ticker, 0.5);
                }

                break;
            case 3:
               
                if(etat_ledVerte)
                    setColor(RED);
                else
                    setColor(BLACK);

                if(isElapsedTime(5000)) {
                    etat = 1;
                    setColor(BLACK);
                    ticker.detach();
                } else if(getFireState() == 2) {
                    begin = timer.read_ms();
                    etat = 2;
                    ticker.detach();
                    setColor(RED);
                }
                break;
        }
        wait(0.1);
        lcd.cls();
    }
}

void setColor(int rgb) // RGB
{
    LED_rouge =  !(0b100 & rgb);
    LED_verte =  !(0b010 & rgb);
    LED_bleue =  !(0b001 & rgb);
}

bool isElapsedTime(int time) // retourne vrai si x temps c'est écoulé, update begin time
{
    int t = timer.read_ms();
    if(t - begin >= 5000) {
        begin = t;
        return 1;
    } else
        return 0;
}

int getFireState()   // Retourne si front montant ou descendant ou rien.
{
    int etat_fire = fire.read();
    int etat = 0;
    if(!last_state &&  etat_fire) { // Front montant
        etat = 1;
    } else if(last_state && !etat_fire) { // Front descendant
        etat = 2;
    } else {
        etat = 0;
    }
    last_state = etat_fire;
    return etat;
}