Horloge RTC
Dependencies: ihm_L476_full RTC_IUT
Diff: main.cpp
- Revision:
- 4:86341306d9d7
- Parent:
- 3:69c53ab43e4e
- Child:
- 5:6ce20ff7927b
diff -r 69c53ab43e4e -r 86341306d9d7 main.cpp --- 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