Travaille effectué lors du deuxieme tp d'informatique.

Dependencies:   C12832

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