claudiusmarius

Esp32ClockInternet

Nov 24th, 2022
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.87 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5.   const int decalage = 1;                                                 // la valeur dépend de votre fuseau horaire. Essayez 2 pour la France.
  6.   //const int delaiDemande = 5 * 60;                                      // nombre de secondes entre deux demandes consécutives au serveur NTP
  7.   const int delaiDemande = 10;                                            // MEILLEUR QUE CI-DESSUS QUI INTRODUIT UN LEGER RETARD
  8.  
  9.   unsigned long derniereDemande = millis();                               // moment de la plus récente demande au serveur NTP
  10.   unsigned long derniereMaJ = millis();                                   // moment de la plus récente mise à jour de l'affichage de l'heure
  11.   unsigned long MonTime;                                                  // MonTime est la variable remise en forme de heure minute pour la compatibilité TM1637
  12.   unsigned long MaDate;                                                   // MaDate est la variable remise en forme de jour mois pour la compatibilité TM1637
  13.  
  14.   int compteur = 0;                                                       // Compteur utilisé dans l'affichage erreur pour limiter le nombre de bips
  15.   time_t maintenant;
  16.   struct tm * timeinfo;
  17.    
  18.   void setup()
  19.   {
  20.  
  21.   Serial.begin(115200);
  22.   pinMode(BrocheBuzzer, OUTPUT);
  23.   pinMode(BrocheLedRouge, OUTPUT);
  24.   pinMode(BrocheLedVerte, OUTPUT);
  25.   pinMode(BrocheLedBleue, OUTPUT);
  26.  
  27.   digitalWrite (BrocheBuzzer, LOW);
  28.   digitalWrite (BrocheLedRouge, LOW);
  29.   digitalWrite (BrocheLedVerte, LOW);
  30.   digitalWrite (BrocheLedBleue, LOW);
  31.  
  32.   display1.setBrightness(0x0f);                                           // Brillance maximale
  33.   display2.setBrightness(0x0f);                                           // Brillance maximale
  34.  
  35.   display1.clear ();
  36.   display2.clear ();
  37.  
  38.   delay (5);
  39.   WiFi.begin(ssid, password);
  40.  
  41.   while (WiFi.status() != WL_CONNECTED)
  42.   {
  43.   digitalWrite (BrocheLedBleue, LOW);
  44.   digitalWrite (BrocheLedRouge, HIGH);
  45.   digitalWrite (BrocheLedVerte, LOW);
  46.   afficheErreur01();
  47.   delay(10);
  48.   display1.clear ();
  49.   display2.clear ();
  50.   }
  51.  
  52.   compteur = 0;
  53.   digitalWrite (BrocheLedBleue, LOW);
  54.   delay (10);
  55.   digitalWrite (BrocheLedRouge, LOW);
  56.   delay (10);
  57.   digitalWrite (BrocheLedVerte, HIGH);
  58.   delay (10);
  59.   Buzzer(300, 10, 1);
  60.   delay(200);
  61.  
  62.   configTime(decalage * 3600, 0, "fr.pool.ntp.org");
  63.   delay(1200);
  64.   time(&maintenant);
  65.  
  66.   }
  67.  
  68.   void loop()
  69.   {
  70.   digitalWrite (BrocheLedBleue, LOW);
  71.   //------------------------------------------------------------------------Condition de demande de l'heure NTP---------------------------------------------------------------------------
  72.   if ((millis() - derniereDemande) >=  delaiDemande * 1000 )              // Dernière demande depuis plus de 10 secondes
  73.   {
  74.   time(&maintenant);                                                      // Rafraichissement
  75.   derniereDemande = millis();                                             // Réactualisation du temps de la dernière demande d'heure (en millisecondes)
  76.   }
  77.   //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  78.  
  79.   //--------------------------------------------------------------Détection du dépassement de millis () (redémarrage à zéro---------------------------------------------------------------
  80.   if (millis() < derniereDemande )                                        // si millis () est plus bas que précédemment c'est donc qu'il redémarre enbas
  81.   {
  82.   time(&maintenant);                                                      // Rafraichissement
  83.   derniereDemande = millis();                                             // Réactualisation du temps de la dernière demande d'heure (en millisecondes)
  84.   }
  85.   //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  86.  
  87.   //-------------------------------------------------------------------Condition sur la MAJ de l'affichage heure/date---------------------------------------------------------------------
  88.   //+++++++++++++++Point important : dans notre cas le temps est incrémenté d'une seconde et l'afichage est mis à jour à chaque seconde (entre 2 lectures de l'heure NTP++++++++++++++++++
  89.   if ((millis() - derniereMaJ) >=   1000 )
  90.   {
  91.   maintenant = maintenant + 1;                                            // Incrémentation d'une seconde
  92.   afficheHeureDate();                                                     // Activation de la fonction afichage heure date
  93.   derniereMaJ = millis();                                                 // Réactualisation du temps de la dernière
  94.   }
  95.   //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  96.   }
  97.  
  98.   void afficheHeureDate()
  99.   {
  100.   if (WiFi.status() != WL_CONNECTED)
  101.   {
  102.   digitalWrite (BrocheLedBleue, LOW);
  103.   digitalWrite (BrocheLedRouge, HIGH);
  104.   digitalWrite (BrocheLedVerte, LOW);
  105.   display1.clear ();
  106.   display2.clear ();
  107.  
  108.   afficheErreur01();
  109.   delay(10);
  110.   }
  111.  
  112.   else
  113.   {
  114.   digitalWrite (BrocheLedBleue, LOW);
  115.   digitalWrite (BrocheLedRouge, LOW);
  116.   //delay (10);
  117.   digitalWrite (BrocheLedVerte, HIGH);
  118.   //delay (10);
  119.  
  120.   timeinfo = localtime(&maintenant);                                      // MAJ de timeinfo
  121.   //MonTime = 100*timeinfo->tm_hour + timeinfo->tm_min +10000 ;           // Conversion pour Display (2 digits heures/ 2digits minutes
  122.   MonTime = 100*timeinfo->tm_hour + timeinfo->tm_min ;
  123.  
  124.   //if (timeinfo->tm_min == 59)                                           // Faire le choix entre ces 2 lignes, ici pour signalisation incrémentation de l'heure
  125.   if (timeinfo->tm_sec == 59)                                             // Faire le choix entre ces 2 lignes, ici pour signalisation incrémentation des minutes (principalement pout tests
  126.   {
  127.   LastEtatMin = HIGH;
  128.   }
  129.   //if ( timeinfo->tm_min == 0 && LastEtatMin == HIGH)
  130.   if ( timeinfo->tm_sec == 0 && LastEtatMin == HIGH)
  131.   {
  132.   delay (10);
  133.   digitalWrite (BrocheLedBleue, HIGH);
  134.   LastEtatMin = LOW;
  135.   Buzzer (15, 5,1);
  136.   delay (10);
  137.   }
  138.  
  139.   digitalWrite (BrocheLedBleue, LOW);
  140.   MaDate = 100*timeinfo->tm_mday + timeinfo->tm_mon + 1;          
  141.   display1.showNumberDecEx(MonTime,0b01000000,true, 4,0);                 // Affichage MonTime en incluant ":"  
  142.   display2.showNumberDec(MaDate,true, 4,0);
  143.   }
  144.   }
  145.  
  146.   void afficheErreur01()
  147.   {
  148.   digitalWrite (BrocheLedBleue, LOW);
  149.   compteur++;
  150.   if (compteur < 5 )
  151.   {
  152.   Buzzer(40, 10, 6);                                                      // Signal sonore d'entrée en défaut
  153.   }
  154.   delay (1000);
  155.    
  156.   //-------------------------------------------------------------------Ci-dessous l'animation des segments---------------------------------------------------------------------------
  157.   const uint8_t segments01 [] = {
  158.   SEG_A ,
  159.   SEG_A ,
  160.   SEG_A ,
  161.   SEG_A ,
  162.   };
  163.  
  164.   const uint8_t segments02 [] =
  165.   {
  166.   SEG_G ,
  167.   SEG_A ,
  168.   SEG_G ,
  169.   SEG_A ,
  170.   };
  171.  
  172.   const uint8_t segments03 [] =
  173.   {
  174.   SEG_D ,
  175.   SEG_G ,
  176.   SEG_D ,
  177.   SEG_G ,
  178.   };
  179.  
  180.   const uint8_t segments04 [] =
  181.   {
  182.   SEG_D ,
  183.   SEG_D ,
  184.   SEG_D ,
  185.   SEG_D ,
  186.   };
  187.  
  188.   int tempo = 20;                                                          // tempo avant le passage à l'affichage suivant
  189.   for (int i = 0; i < 30; i++)                                             // i = nmbre de repition de la boucle d'affichage
  190.   {
  191.   display1.setSegments (segments01, 4, 0);
  192.   display2.setSegments (segments04, 4, 0);
  193.   delay (tempo);
  194.  
  195.   display1.setSegments (segments02, 4, 0);
  196.   display2.setSegments (segments03, 4, 0);
  197.   delay (tempo);
  198.  
  199.   display1.setSegments (segments03, 4, 0);
  200.   display2.setSegments (segments02, 4, 0);
  201.   delay (tempo);
  202.  
  203.   display1.setSegments (segments04, 4, 0);
  204.   display2.setSegments (segments01, 4, 0);
  205.   delay (tempo);
  206.   }
  207.   }
  208.  
  209.   void Buzzer (int TempsH, int TempsL, int nb)                            // TempsH => délai buzzer ON, TempsL => délai buzzer OFF, nb => nombre de bips
  210.   {
  211.   for (int x = 1; x <= nb; x++) // ************************************** // Boucle le nombre de fois voulu passé par l'argument "int nb"
  212.   {
  213.   digitalWrite(BrocheBuzzer, HIGH);                                       // Active le buzzer
  214.   delay (TempsH);                                                         // Temporisation à l'état haut du buzzer pendant la durée passée par l'argument "int TempsH"
  215.   digitalWrite(BrocheBuzzer, LOW);                                        // Désactive le buzzer
  216.   delay (TempsL);                                                         // Temporisation à l'état bas du buzzer pendant la durée passée par l'argument "int TempsL"
  217.   }
  218.   }
Add Comment
Please, Sign In to add comment