Horloge RTC
Dependencies: ihm_L476_full RTC_IUT
main.cpp
- Committer:
- grimwald
- Date:
- 2020-07-27
- Revision:
- 5:6ce20ff7927b
- Parent:
- 4:86341306d9d7
- Child:
- 6:21be959149c3
File content as of revision 5:6ce20ff7927b:
#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 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() { 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 } } void automate(void) { // définition d'un type énuméré permettant de manipuler l'état de l'automate // par son nom typedef enum {affichage=0, Minutep =1, Minutem =2, Heurep= 3,Heurem =4,Calendrier=5,Jour+=6,Jour} 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 , entree; // gestion des entrees 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 affichage : if(entreed)etat_futur= Minutep;//si j'appuie 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'appuie 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(entree)etat_futur=Calendrier;//si j'appuie je vais sur le calendrier 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 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; case Calendrier: break; } // valeurs des sorties en fonction de l'état actuel switch(etat_actuel) { case affichage : ihm.BAR_set(0); 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 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:%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 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 Calendrier: break; } }