Actualiser heure

Bonjour,

Avec mon programme j'aimerais pouvoir afficher l'heure sur un écran tactile, cependant l'heure ne s'affiche que quand elle est chargé et ne veut pas s'actualiser, voici la partie isolé du programme que j'ai actuellement:

void setup() {
  
  Wire.begin(); 
  accueil(); 
  pinMode (ledrouge,OUTPUT);
  pinMode(2, INPUT); 
  digitalWrite(2, HIGH);
  RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));
  RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  if (TimeIsSet != 0xaa55)
  {
    RTC.stopClock();
    

TimeIsSet = 0xffff;
RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));  



   
    //RTC.fillByYMD(2014,5,15);
    //RTC.fillByHMS(14,21,0);
    
    RTC.setTime();
    TimeIsSet = 0xaa55;
    RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    RTC.startClock();
  }
  else
  {
    RTC.getTime();
  }

  RTC.ctrl = 0x00;                      
                                       

  uint8_t MESZ;

  MESZ = RTC.isMEZSummerTime();
  

}

void affichageheure () {
   
  RTC.getTime();
  char heures[2];
  char minutes[2];  
  lcd.xy(260,1);
  lcd.color(BLACK);
  lcd.printString(itoa(RTC.hour,heures,DEC));
  lcd.xy(285,1);
  lcd.color(BLACK);
  lcd.println(":");
  lcd.xy(293,1);
  lcd.color(BLACK);
  lcd.printString(itoa(RTC.minute,minutes,DEC));
  
  
  lcd.theme( 1, 0, 3, 0, 2, 3, 2, 2, 2, 1, 1 ); 
  
  uint8_t MESZ = RTC.isMEZSummerTime();
  
  RTC.getRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t));
  
  lastAddr = lastAddr + 1; 
  RTC.setRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t));
  RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  
  delay(50);
  
}

J'aimerais savoir si quelqu'un peut m'aider s'il vous plait, je serais vraiment reconnaissant.

OK, on voit que tu as une fonction qui affiche l'heure mais, sortie de son contexte, on est incapable de dire ce qui ne va pas.
Appelles-tu cette fonction au moins une fois toutes les minutes?

Je ne vois pas le loop()?

Mon loop() permet d'acceder aux différentes pages
Ainsi par exemple mais autre sont faite sur ce même modèle

 void heure(void) {   // créé une variable heure
  lcd.begin( EZM_BAUD_RATE );
  lcd.cls( WHITE, BLACK );
  lcd.font("0");
  lcd.printString("\\[115x\\[10yPlage horaire ");
  lcd.theme( 6, 0, 3, 0, 2, 3, 2, 2, 2, 1, 1 );
  lcd.string( 31, "Demarrage" );
  lcd.string( 32, "Arret" );
  lcd.button( 31, xPos31, yPos31, width, height, option, alignment, radius, 13, 31 );
  lcd.button( 32, xPos32, yPos32, width, height, option, alignment, radius, 13, 32 );
  lcd.string( 24, "Retour" ); 
  lcd.button( 24, xPos24, yPos24, width, height, option, alignment, radius, 6, 24 );
  lcd.theme( 7, 0, 3, 0, 2, 3, 2, 2, 2, 1, 1 );
  affichageheure();
 }

Avec juste un bout de code on peut pas trop deviner.

Si c'est un module RTC classique, l'heure est réglée une seule fois, ensuite on doit commenter avec // les lignes de codes dans le setup qui servent au réglage de la date et de l'heure pour les désactiver.

Je vien de changer mon programme pour mettre le total dans mon de cette façon:

void loop () {
  
  touch=lcd.wstack(0);
  
  RTC.getTime();
  char heures[2];
  char minutes[2];  
  lcd.xy(260,1);
  lcd.color(BLACK);
  lcd.printString(itoa(RTC.hour,heures,DEC));
  lcd.xy(285,1);
  lcd.color(BLACK);
  lcd.println(":");
  lcd.xy(293,1);
  lcd.color(BLACK);
  lcd.printString(itoa(RTC.minute,minutes,DEC));
  
  
  lcd.theme( 1, 0, 3, 0, 2, 3, 2, 2, 2, 1, 1 );  // défini le style et les couleur de l'objet associé
  
  uint8_t MESZ = RTC.isMEZSummerTime();
  
  RTC.getRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t));
  
  lastAddr = lastAddr + 1;              // we want to use it as addresscounter for example
  RTC.setRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t));
  RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  

}

Maintenant l'actualisation fonctionne mais les chiffres qui était déjà afficher reste et ils s'entassent les uns sur les autres :~

Normal entre deux "impression" tu n'efface rien (pas de" clear screen") donc tu viens écrire par dessus.

Prévoir une fonction avec l'utilisation de millis() qui te permettra d'actualiser l'heure toutes les secondes
Prévoir un masque d'affichage qui efface les caractères d'avant pour remplacer par les nouveaux

Si possible éviter le clear screen qui fait papilloter l'écran (et qui ralenti le programme). Préférer un effacement local de la zone qui contient le texte à modifier.

Oui c'est vrai je l'ai constaté aussi. Il vaut mieux faire un:
lcd.print(" ");

qu'un

lcd.clear()

:wink: