Horloge RTC

Dependencies:   ihm_L476_full RTC_IUT

Revision:
4:86341306d9d7
Parent:
3:69c53ab43e4e
Child:
5:6ce20ff7927b
--- a/main.cpp	Mon Jun 01 19:34:43 2020 +0000
+++ b/main.cpp	Wed Jun 17 21:34:59 2020 +0000
@@ -1,21 +1,34 @@
+#include "RTC_IUT.h"//bibliotheque de l'afficheur
+#include "ihm_L476.h"//bibliotheque du chrono
+//DigitalIn BPC (PA_0,PullNone) ;  // bouton centre
+DigitalIn BPL (PA_1,PullDown) ;//left
+DigitalIn BPR(PA_2,PullDown) ;//right
+DigitalIn BPU(PA_3,PullDown) ;//up
+DigitalIn BPD (PA_5,PullDown) ;//down
+DigitalOut LG (PE_8) ;  // led verte
+DigitalOut LR (PB_2) ;  // led rouge
 
-#include "ihm_L476.h"
-DigitalIn BPC (PA_0,PullNone) ;  // bouton centre
-DigitalIn BPB (PA_1,PullDown) ;//bouton down
-IHM_L476 ihm;//bibliotheque de l'afficheur
-Timer temps; //bibliotheque du chrono
+IHM_L476 ihm; // on chosis des noms qui nous serviront a appelé les fonctions dans les bibliotheque
+Rtc rtc; 
+time_t heure_t,minute_t,seconde_t;//on nomme nos valeur qui seront sous le format time_t
 
 // prototype et variables globales et constantes
+static unsigned char Heure_t=23,Minute_t=59,Seconde_t = 50; // on defini l'heure avec une unsigned char
+
 void automate(void);
-//
+
 
 
 int main()
 {
-    
-    ihm.LCD_printf("CHRONO");
+    rtc.SetHour(Heure_t);
+    rtc.SetMin(Minute_t);// On initialise l'heure , les minutes et les secondes
+    rtc.SetSec(Seconde_t);
+    rtc.SetYear(2020);
+    ihm.LCD_printf("CLOCK");
     // début de l'application
     while(1) {
+        wait(0.1);
         automate(); // ce qui se produit sur top de clock
     }
 }
@@ -25,77 +38,122 @@
 {
     // définition d'un type énuméré permettant de manipuler l'état de l'automate
     // par son nom
-    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
-    int entree;
-    int entreeb;
-    static int minute;
-    
+    typedef enum {affichage=0, Minutep =1, Minutem =2, Heurep  = 3,Heurem =4} type_etat;
+    type_etat etat_actuel = affichage ;   // déclaration état actuel init. à etat0
+    static type_etat etat_futur = affichage;  // déclaration état futur
+    int entreeb, entreeh, entreeg, entreed;
+
     // gestion des entrees
-    entree = BPC;// c'est le bouton centre
-    entreeb = BPB;// c'est le bouton bas
+    //entree = BPC;// c'est le bouton centre
+    entreeb = BPD;// c'est le bouton bas
+    entreeh = BPU;
+    entreeg = BPL;
+    entreed = BPR;
     // 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 :
-            if (entreeb) etat_futur = reset;
-            if (entree) etat_futur = start;
-            break;
-       
-        case start :
-            temps.start();//pour demarrer le chrono
-            if (!entree) etat_futur = affichage;
-            break;
-       
-        case stop :
-            temps.stop();//pour stop le chrono
-            if (!entree) etat_futur = etat0;
-            break;
-       
-        case reset :
-            temps.reset();// pour reset le chrono
-            if (!entreeb) etat_futur = etat0;
-            break;
-       
-        case lap :
-            if (entreeb) etat_futur = affichage;
+
+
+        case affichage :
+            if(entreed)etat_futur= Minutep;//si j'appui sur droite j'augmente les minute de 1
+            if(entreeg)etat_futur=Minutem;//si j'appuie a gauche je diminue les minutes de 
+            if(entreeh)etat_futur=Heurep;//si j'appui sur haut j'augmente les heures de 1
+            if(entreeb)etat_futur=Heurem;//si j'appuie en bas je diminue les heures de 1
+
+            if(Minute_t >59  ) { // si Minute_t depasse 59 minutes alors Minute_t reviens a 0 et j'incremente Heure_t de 1
+                Minute_t=00;     
+               rtc.SetHour(Heure_t++);
+            }
+            if(Heure_t > 23 ) {//si Heure_t depasse 23 heures alors Heure_t reviens a 0
+                Heure_t = 00;
+            }
+            
+            if(Seconde_t >59 ) {// si Seconde_t depasse 59 secondes alors Secondes_t reviens a 0 et j'incremente Minute_t de 1
+                Seconde_t = 00;
+                rtc.SetMin(Minute_t++);
+            }
             break;
         
-         case affichage :
-            if (entreeb) etat_futur = lap;
-            if (entree) etat_futur = stop;
+        
+        case Minutep:
+           rtc.SetMin(Minute_t++); // j'incremente Minute_t
+            rtc.SetSec(00);//je met les secondes a zero a chaque changement d'etat
+            etat_futur = affichage;// je retourne a l'affichage
+            break;
+        case  Minutem:
+            rtc.SetMin(Minute_t--);//je diminue Minute_t
+            rtc.SetSec(00);
+            etat_futur = affichage;
             break;
-        
+
+        case Heurep:
+            rtc.SetHour(Heure_t++);//j'incremente Heure_t
+            rtc.SetSec(00);
+            etat_futur = affichage;
+            break;
+
+        case Heurem:
+           rtc.SetHour(Heure_t--);
+            rtc.SetSec(00);
+            etat_futur = affichage;
+            break;
+
+
+
+
     }
     // valeurs des  sorties en fonction de l'état actuel
     switch(etat_actuel) {
-       
-        case etat0 :
+
+
+
+        case affichage :
             ihm.BAR_set(0);
-            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
+             heure_t= rtc.GetHour();
+             minute_t = rtc.GetMin();//J'utilise les valeurs qui ont été etablie avant et je les met dans des variables
+             seconde_t = rtc.GetSec();
+            ihm.LCD_printf("%02d:%02d:%02d",heure_t,minute_t,seconde_t);
+            LG=0;// je met les leds a 0 pour un effet de clignotement 
+            LR=0;
+            
             break;
-        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;
-                }
+
+
+
+        case Minutep :
+            ihm.BAR_set(2);
+            heure_t= rtc.GetHour();
+             minute_t = rtc.GetMin();//J'utilise les valeurs qui ont été etablie avant et je les met dans des variables
+             seconde_t = rtc.GetSec();
+           ihm.LCD_printf("%02d:%02d:%02d",heure_t,minute_t,seconde_t);
+             LG=1;// j'allume verte pour l'incrementation
+            LR=0;
+            break;
+        case Minutem :
+            ihm.BAR_set(2);
+            ihm.LCD_printf("%02d:%02d:%02d",heure_t,minute_t,seconde_t);
+             LG=0;// j'allume rouge pour la diminution
+            LR=1;
+            break;
+        case Heurep :
             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
-            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
+            ihm.LCD_printf("%02d:%02d:%02d",heure_t,minute_t,seconde_t);//affichage de l'heure en format 00:00:00
+             LG=1;// j'allume verte pour l'incrementation
+             LR=0;
             break;
-        case stop :
-            ihm.BAR_set(4);
-            ihm.LCD_printf("%02d:%05.2f",minute,temps.read());   //affiche le temps figé pendant que le temps continue
+
+        case Heurem :
+            ihm.BAR_set(1);
+            ihm.LCD_printf("%02d:%02d:%02d",Heure_t,Minute_t,seconde_t);
+             LG=0;
+            LR=1;// j'allume rouge pour la diminution
             break;
-         case lap :
-            ihm.BAR_set(8);
-            break;
+
+
+
     }
 }
\ No newline at end of file