heure Ecran 7 segments I2C

bonjour voila j’ai ceci Afficheur 4 chiffres à segments LED avec driver I2C avec ce code

#include <TimerOne.h>   
#include "TM1637.h"  //librairie du driver du 7 segments
#define ON 1
#define OFF 0
#define hhmm 01  //0 pour afficher HH:MM et 1 pour MM:SS

int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};   //Tableau des 4 chiffres
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char minute = 0;
unsigned char hour = 12;   //Heure 12:00:00 pour initialiser

// branchement I2C sur CLK -> pinA5  et DIO -->Pin A4
#define CLK A5
#define DIO A4  //3
TM1637 tm1637(CLK,DIO);  //Objet tm1637

void setup()
{
  tm1637.set();
  tm1637.set(7);   //0 éclairage faible réglable jusqu'à 7 le plus intense
  tm1637.init();   //Initialisation du driver
 
   //Affichage de départ ABCD (le module peut afficher abcdef)
  TimeDisp[0] = 10;    //Affichage a
  TimeDisp[1] = 11;    //b
  TimeDisp[2] = 12;    //c
  TimeDisp[3] = 13;    //d
  tm1637.display(TimeDisp);
  delay(5000);  //Pendant 5 sec
 
  //Horloge mise à jour 2 fois par seconde pour faire clignotter le :
  Timer1.initialize(500000);  // timing pour 500ms
  Timer1.attachInterrupt(TimingISR); //declare l'interruption qui déclenche TimingISR 
}


void loop()
{
  if(Update == ON)
  {
    TimeUpdate();
    tm1637.display(TimeDisp);
  }
 
}
void TimingISR()
{
  halfsecond ++;
  Update = ON;
  if(halfsecond == 2){
    second ++;
    if(second == 60)
    {
      minute ++;
      if(minute == 60)
      {
        hour ++;
        if(hour == 24)hour = 0;
        minute = 0;
      }
      second = 0;
    }
    halfsecond = 0; 
  }
 // Serial.println(second);
  ClockPoint = (~ClockPoint) & 0x01;
}

void TimeUpdate(void)
{
  if(ClockPoint)tm1637.point(POINT_ON);
  else tm1637.point(POINT_OFF);
  if (hhmm==0)
  {
  TimeDisp[0] = hour / 10;    //Affichage hh:mm
  TimeDisp[1] = hour % 10;
  TimeDisp[2] = minute / 10;
  TimeDisp[3] = minute % 10;
  }
  else
  {
  //Affichage mm:ss
  TimeDisp[0] = minute / 10;    //Affichage hh:mm
  TimeDisp[1] = minute % 10;
  TimeDisp[2] = second / 10;
  TimeDisp[3] = second % 10;
  }
  Update = OFF;
}

c’est sensé afficher l’heure mais j’ai un chronomètre ja trouve pas l erreur dans le code un peu d’aide ne serais pas de refus merci

Bonjour

ce code ne dispose d'aucun systeme de mise à l'heure.

En l'état il affiche le temps écoulé de puis la mise sous tension (au choix au format HH;MM ou MM:SS)
D'ou le comportement en chronometre observé, cohérent avec le code. Dire qu'il est "censé afficher l'heure" est très optimiste.....

(Le comptage du temps se fait à partir de zéro car c'est comme cela que le tableau TimeDisp est initialisé)

autant pour moi alors
je vais continuer a chercher je debute
si tu a un tuyau pour afficher l heure je suis preneur , je veux apprendre

bon j'ai trouver une solution et qui marche
mon seul souci c'est que quand je debranche arduino puis le rebranche plus tard l heure ne ce met pas a jour une idée ?

Ajouter un composant RTC (horloge) genre DS2331, il se chargera de l'heure et avec sa pile continuera de jouer s'on rôle d'horloge quand l'Arduino sera débranché.

j’ai justement un RTC DS3231 mais pour le coup j’ai aucune idée de pourquoi sa ne ce met pas a l heure

voici mon code

// LIBRAIRIES
 
   #include <DHT.h> // inclure les librairies
   #include <Wire.h>
   #include <LiquidCrystal_I2C.h>
   #include <RTClib.h> //librairie à télécharger en ZIP sur https://github.com/jcw/rtclib
   #include "TM1637.h"

// Digital

//{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
//0~9,A,b,C,d,E,F,"-"," ",degree,r,h

#define CLK 4//Pins for TM1637       
#define DIO 5
TM1637 tm1637(CLK,DIO);

// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
int hh, mm; 

// Fin


// ECRAN

   LiquidCrystal_I2C lcd(0x27, 16,2); // Initialise le module 1602 I2C
   LiquidCrystal_I2C lcd2 (0x3f,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

// FIN

// FIN

// DHT 22

   const int relayPin = 13; // PIN 13 pour test sur une LED de la carte
   const int DHTPIN = 13;

   // Type de capteur utiliser
   #define DHTTYPE DHT22   // DHT 11
   DHT dht(DHTPIN, DHTTYPE);// Initialise le capteur DHT11

// FIN

//RTC

   #if defined(ARDUINO) && ARDUINO >= 100
   #define printByte(args)  write(args);
   #else
   #define printByte(args)  print(args,BYTE);
   #endif
   uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0}; 
   RTC_DS3231 RTC;

//FIN


   void setup() {

// Digital

   tm1637.init();
   tm1637.set(5); 
  //BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;

   rtc.begin();
   // manual adjust
   // January 21, 2014 at 3am you would call:
   // rtc.adjust(DateTime(201, 12, 22, 18, 18, 0));
   // automatic adjust
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

// Fin
    

// DATE

 
 lcd.init();  // initialisation du LCD1
  lcd2.init();  // initialisation du LCD2
  lcd.backlight();
  lcd2.backlight();
  lcd.print("Initialisation....");  //afficher un message sur l'afficheur LCD
  lcd.createChar(2, clock);
  lcd2.print("Initialisation...."); //afficher un message sur l'afficheur LCD
  delay (2500) ;
  delay (2500);
  Wire.begin();
  Wire.begin();
  lcd.begin(16,2);
  lcd2.begin(16,2);

  // Print a message to the LCD.
   
   lcd2.backlight();
   lcd2.setCursor(5,0);
   lcd2.print("Salut");
   lcd2.setCursor(2,1);
   lcd2.print("Mugen Zaraki");
   
// FIN


  
  RTC.begin();
  RTC.adjust(DateTime(__DATE__, __TIME__)); //Ajuster la clock avec l'heure et la date de l'ordinateur

  
  Serial.begin(9600);
  pinMode(relayPin, OUTPUT);
  dht.begin();
  // Définit l'écran LCD 16 colonnes par 2 lignes
  lcd.init();
  // Réglage du rétroéclairage
  lcd.setBacklight(HIGH);

// FIN


}
   void loop()
{


//Digital

DateTime now = rtc.now();
hh = now.hour(), DEC;
mm = now.minute(), DEC;
tm1637.point(POINT_OFF);
    tm1637.display(0,hh/10);     // hour
    tm1637.display(1,hh%10);
    tm1637.display(2,mm/10);    // minutes
    tm1637.display(3,mm%10);    // 
delay(500);
tm1637.point(POINT_ON);
    tm1637.display(0,hh/10);     // hour
    tm1637.display(1,hh%10);
    tm1637.display(2,mm/10);    // minutes
    tm1637.display(3,mm%10);    // 
delay(50);

// Fin


// BOUCLE TEMPERATURE
  
   // Lecture de température et de l'humiditer environ 250 millisecondes
   // La durer des capteurs peuvent etre regler jusqu'a 2 secondes (capteur tres lent)
   float h = dht.readHumidity();
   // Lit la temperature en degres Celsius (valeur par defaut
   float t = dht.readTemperature();
   float c = dht.readTemperature(true);

  // Vérifie si toutes les lectures ont échoué et quitte le début (pour réessayer).
  if (isnan(h) || isnan(t) || isnan(c)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

// FIN

// DATE LCD

    //code pour afficher heure et date de la clock (du RTC) sur l'écran LCD
   
       
    lcd.setCursor(3,0);
    lcd.print(now.day(), DEC);
    lcd.print('/');
    lcd.print(now.month(), DEC);
    lcd.print('/');
    lcd.print(now.year(), DEC);
    lcd.print(' ');
    delay(1000);

// FIN

// Temperature et humidité LCD

  lcd.setCursor(0, 1);
  lcd.print("");
  lcd.print(t);
  lcd.print(" C");
  lcd.setCursor(9, 1);
  lcd.print("");
  lcd.print(h);
  lcd.print(" % ");

  Serial.print("Temperature = ");
  Serial.print(t);
  Serial.print(" *C ");
 
  Serial.print("Humidity = ");
  Serial.print(h);
  Serial.print(" %\t ");
  Serial.println();


  if (h >= 75 && h <= 80) // si hum. est = ou sup. a 75 ET hum infer. ou = a 80 relais ouvert
  {
    digitalWrite(relayPin, HIGH);
  }
  else
  {
    digitalWrite(relayPin, LOW); // Sinon relais fermé
  }
  delay(1000);// Delai d'une seconde entre les mesures

  
}

// FIN

comme pour une montre en sortie d'usine : faire une mise à l'heure initiale , ensuite l'objet se charge de 'rester à l'heure'

ici ?

 rtc.begin();
   // manual adjust
   // January 21, 2014 at 3am you would call:
    rtc.adjust(DateTime(2018, 12, 22, 19, 04, 0));
   // automatic adjust
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

je suis assez novice c'est pour ca que je demande

il faut choisir entre manual et automatic.
En principe automatic devrait , il me semble, mettre dans le DS2331 l'heure du système d'exploitation au moment de la compilation..... en matière de RTC je suis également un débutant......

 rtc.begin();
   // manual adjust
   // December , 2018 at 19pm you would call:
   // rtc.adjust(DateTime(2018, 12, 22, 19, 04, 0));
   // automatic adjust
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

oui jme suis apercu de l erreur mais sa change rien si j enleve les // devant automatic j’ai cette erreur
"C:\Users\aurejin\Documents\Arduino\date , temp , humi , digi\date___temp___humi___digi.ino.ino\date___temp___humi___digi.ino.ino.ino:73:23: note: in expansion of macro ‘F’

rtc.adjust(DateTime(F(DATE), F(TIME)));

^

D:\arduino\hardware\arduino\avr\cores\arduino/WString.h:38:74: error: expected primary-expression before ‘)’ token

#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))

^

C:\Users\aurejin\Documents\Arduino\date , temp , humi , digi\date___temp___humi___digi.ino.ino\date___temp___humi___digi.ino.ino.ino:73:36: note: in expansion of macro ‘F’

rtc.adjust(DateTime(F(DATE), F(TIME)));

^

exit status 1
‘automatic’ was not declared in this scope"