
Travaille effectué lors du deuxieme tp d'informatique.
Diff: main.cpp
- Revision:
- 7:232b7abac027
- Parent:
- 6:f8cb706c480c
--- a/main.cpp Tue Sep 19 15:25:01 2017 +0000 +++ b/main.cpp Wed Mar 31 13:35:37 2021 +0000 @@ -1,19 +1,121 @@ -#include "mbed.h" -#include "C12832.h" +#include "mbed.h" //Définition Mbde +#include "C12832.h" //Librairie du LCD + +#define RED 0b100 +#define GREEN 0b010 +#define BLUE 0b001 +#define BLACK 0b000 -// Using Arduino pin notation -C12832 lcd(D11, D13, D12, D7, D10); +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() { - int j=0; lcd.cls(); - lcd.locate(0,3); - lcd.printf("mbed application shield!"); + 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: - while(true) { // this is the third thread - lcd.locate(0,15); - lcd.printf("Counting : %d",j++); - wait(1.0); + 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; +} \ No newline at end of file