Horloge RTC

Dependencies:   ihm_L476_full RTC_IUT

Revision:
3:69c53ab43e4e
Parent:
2:29559ef1623d
Child:
4:86341306d9d7
--- a/main.cpp	Sun May 24 14:42:33 2020 +0000
+++ b/main.cpp	Mon Jun 01 19:34:43 2020 +0000
@@ -1,13 +1,9 @@
 
 #include "ihm_L476.h"
-Serial pc(SERIAL_TX, SERIAL_RX);//liason série
 DigitalIn BPC (PA_0,PullNone) ;  // bouton centre
 DigitalIn BPB (PA_1,PullDown) ;//bouton down
-DigitalOut LG (PE_8) ;  // led verte
-DigitalOut LR (PB_2) ;  // led rouge
-
 IHM_L476 ihm;//bibliotheque de l'afficheur
-Timer temps,temps2; //bibliotheque du chrono
+Timer temps; //bibliotheque du chrono
 
 // prototype et variables globales et constantes
 void automate(void);
@@ -20,7 +16,6 @@
     ihm.LCD_printf("CHRONO");
     // début de l'application
     while(1) {
-        wait(0.2);  //c'est la clock (5 Hz)
         automate(); // ce qui se produit sur top de clock
     }
 }
@@ -30,12 +25,12 @@
 {
     // définition d'un type énuméré permettant de manipuler l'état de l'automate
     // par son nom
-    typedef enum {etat0=0, start=1, stop=2,reset=3,lap=4} type_etat;
+    typedef enum {etat0=0,affichage=1, start=2, stop=3,lap=4,reset=5} type_etat;
     type_etat etat_actuel = etat0 ;   // déclaration état actuel init. à etat0
     static type_etat etat_futur = etat0;  // déclaration état futur
-    static int minute = 0; // declaration de minute en static pour que la valeur ne soit pas réinitialiser 
     int entree;
     int entreeb;
+    static int minute;
     
     // gestion des entrees
     entree = BPC;// c'est le bouton centre
@@ -43,29 +38,36 @@
     // 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) {
+        //les différents états en accord avec le diagramme de transition
         case etat0 :
-            minute = 0; //pour reset
-            temps.reset();//pour reset
+            if (entreeb) etat_futur = reset;
             if (entree) etat_futur = start;
             break;
+       
         case start :
             temps.start();//pour demarrer le chrono
-            temps2=temps;//le temps2 recopie le temps de base 
-            if (entree) etat_futur = stop;
-            if (entreeb) etat_futur = lap;
+            if (!entree) etat_futur = affichage;
             break;
+       
         case stop :
-            temps.stop();
-            if (entree) etat_futur = start;
-            if (entreeb) etat_futur = reset; //si j'appui sur le bouton down quand le chrono est stoppé il se reset
+            temps.stop();//pour stop le chrono
+            if (!entree) etat_futur = etat0;
             break;
+       
         case reset :
-            etat_futur = etat0;
+            temps.reset();// pour reset le chrono
+            if (!entreeb) etat_futur = etat0;
             break;
+       
         case lap :
-            temps2.stop();//le temps 2 se met en pause (qui est la copie du temps de base)pendant que le temps de base continue
-            if (entreeb) etat_futur = start;
+            if (entreeb) etat_futur = affichage;
+            break;
+        
+         case affichage :
+            if (entreeb) etat_futur = lap;
+            if (entree) etat_futur = stop;
             break;
         
     }
@@ -74,29 +76,26 @@
        
         case etat0 :
             ihm.BAR_set(0);
-            ihm.LCD_printf("%02d.%05.2f",minute,temps.read());//affiche le temps a zero
-            pc.printf("%02d.%05.2f\r\n",minute,temps.read())
+            ihm.LCD_printf("%02d:%05.2f",minute,temps.read()); //ihm.LCD_printf("%02d:%02d:%02d",temps.read_ms()) on peut utiliser une autre facon pour affiche le temps; //affiche le temps a zero
             break;
-        case start :
-            if(temps.read()>59.99){
-                temps.reset();          // je reset les seconde a 0 et je rajoute une minute car 60s = 1 min
+        case affichage :
+       if(temps.read()>59.99){
+                temps.reset();          // je reset les seconde a 0 et je rajoute une minute car 60s = 1 min //on peut faire autrement
                 minute = minute +1;
                 }
-            
             ihm.BAR_set(1);//debug de l'état
-            ihm.LCD_printf("%02d.%05.2f",minute,temps.read());    // affichage mis a jour du temps // affichage sur l'écran LCD
-            pc.printf("%02d.%05.2f \r\n",minute,temps.read());  // affichage sur pc
+            ihm.LCD_printf("%02d:%05.2f",minute,temps.read());     // affichage mis a jour du temps // affichage sur l'écran LCD
+            break;
+        case start :
+            ihm.BAR_set(2);//debug de l'état
+            ihm.LCD_printf("%02d:%05.2f",minute,temps.read());      // affichage sur l'écran LCD
             break;
         case stop :
-            ihm.BAR_set(2);//debug de l'état
-            ihm.LCD_printf("%02d.%05.2f",minute,temps.read());    // affichage sur l'écran LCD
-            pc.printf("%02d.%05.2f\r\n",minute,temps.read());   // affichage du temps en pause     // affichage sur pc  
+            ihm.BAR_set(4);
+            ihm.LCD_printf("%02d:%05.2f",minute,temps.read());   //affiche le temps figé pendant que le temps continue
             break;
-        case lap :
-            ihm.BAR_set(4);
-            ihm.LCD_printf("%02d.%05.2f",minute,temps2.read()); //affiche le temps figé pendant que le temps continue
-            pc.printf("%02d.%05.2f\r\n",minute,temps2.read())
+         case lap :
+            ihm.BAR_set(8);
             break;
-            
     }
 }
\ No newline at end of file