Horloge RTC

Dependencies:   ihm_L476_full RTC_IUT

Revision:
2:29559ef1623d
Parent:
1:1e5f482dad5b
Child:
3:69c53ab43e4e
--- a/main.cpp	Tue May 19 20:00:04 2020 +0000
+++ b/main.cpp	Sun May 24 14:42:33 2020 +0000
@@ -1,22 +1,102 @@
-#include "mbed.h"
-DigitalOut ledR(PB_2);
-DigitalOut ledG(PE_8);
+
+#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
+
+// prototype et variables globales et constantes
+void automate(void);
+//
+
+
 int main()
 {
-    unsigned short compteur1=0,compteur2=0;
-    ledR=0;
-    ledG=0;
-    while (true) {
-        wait_ms(1);
-        compteur1++;
-        compteur2++ ;
-        if(compteur1>500) {
-            ledR=!ledR;
-            compteur1=0 ;
-        }
-        if(compteur2>1500) {
-            ledG=!ledG;
-            compteur2=0 ;
-        }
+    
+    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
     }
 }
+
+
+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, start=1, stop=2,reset=3,lap=4} 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;
+    
+    // gestion des entrees
+    entree = BPC;// c'est le bouton centre
+    entreeb = BPB;// c'est le bouton bas
+    // 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 :
+            minute = 0; //pour reset
+            temps.reset();//pour 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;
+            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
+            break;
+        case reset :
+            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;
+            break;
+        
+    }
+    // valeurs des  sorties en fonction de l'état actuel
+    switch(etat_actuel) {
+       
+        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())
+            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
+                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
+            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  
+            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())
+            break;
+            
+    }
+}
\ No newline at end of file