rafraichir afficheur lcd ili9341

Bonjour, j'affiche l'heure et la date sur un afficheur lcd couleur, mais j'arrive pas a rafraichir correctement l'afficheur.

A la fin de mon programme , j'ajoute la fonction "ucg.clearScreen();", mais l'afficheur se rafraichit tous les 4 secondes, et c'est pas pratique .

Voici mon code .

#include <SPI.h>
#include "Ucglib.h"
#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

Ucglib_ILI9341_18x240x320_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 9 , /*cs=*/ 10, /*reset=*/ 8);

void setup(void)
{
   rtc.begin();
 
  ucg.begin(UCG_FONT_MODE_TRANSPARENT);
  //ucg.begin(UCG_FONT_MODE_SOLID);
  ucg.clearScreen();
  
   
 
    // rotation de 90°
  ucg.setRotate90();
  
    ucg.setColor(0, 3, 6, 20 );
  ucg.setColor( 1, 13, 22, 66 );
  ucg.setColor( 2, 21, 37, 115 );
  ucg.setColor( 3, 29, 50, 150 );
  ucg.drawGradientBox(1,1,320,240);
  
  
   // The following lines can be uncommented to set the date and time
 // rtc.setDOW(Dimanche);     // Set Day-of-Week to SUNDAY
 // rtc.setTime(14, 22, 0);    // Set the time to 12:00:00 (24hr format)
 // rtc.setDate(13, 9, 2015);   // Set the date to January 1st, 2014


  
  }
  

void loop(void)
{

  
 ucg.setFontPosBaseline();
ucg.setFont(ucg_font_ncenB18);
ucg.setColor(255, 255, 255);
ucg.setPrintPos(45,30);
ucg.setPrintDir(0);
ucg.print(rtc.getDOWStr());

  
 ucg.setFontPosBaseline();
ucg.setFont(ucg_font_ncenB18);
ucg.setColor(255, 255, 255);
ucg.setPrintPos(100,60);
ucg.setPrintDir(0);
ucg.print(rtc.getDateStr());

 ucg.setFontPosBaseline();
ucg.setFont(ucg_font_ncenB18);
ucg.setColor(255, 255, 255);
ucg.setPrintPos(50,90);
ucg.setPrintDir(0);
ucg.print(rtc.getTimeStr());
  ucg.clearScreen();

 
  
}

Salut,

Pourquoi effacer l’écran en fin de loop, perso sur mon lcd, je fait un cls (effacement écran) juste dans le setup, puis après je modifie juste les valeurs qui doivent être modifier.

Essai de faire un essai sans clear.Screen.

@+

je l'ai déja fait , mais l'heure est illisible, au fil du temps c'est remplacer par un carré blanc .

A lieu d'afficher la date et l'heure en une seule fois, décompose la date en jour, mois, année et l'heure en HH:MM:SS, puis affiche séparément les différentes valeurs pour voir ce qui produit le bug d'affichage.

Bonjour, je ne suis pas un pro mais je me permet de donner mon avis. A chaque boucle de la Loop tu inscrit sur ton écran toutes les données alors que, par exemple le jour change qu'une fois tous les 24 heures. Se qui est critique c'est les secondes, les minutes dans une moindre mesure, ....
Je vais bientot mettre a nouveau mon RTC en fonction pour la suite de ma bidouille. Perso je pense faire une variable byte pour les secondes minutes, heure, voir les années. Je les disposes individuellement sur l'écran une fois au démarrage, et ensuite j'effectue des comparaisons de toutes mes variables avec le module RTC. Si une variable change, j'écrie l'ancienne valeur en couleur de fond (n'est plus visible donc^) et écrie la nouvelle avec la couleur qui va bien.(Si je n'enleve pas l'ancienne valeur, la nouvelle s'écrit par dessus et sa deviens illisible)

Un exemple

 if (old_t != t)
    {
      
    tft.setTextColor (RED);
    tft.setTextSize(2);    
    tft.setCursor(3,43);
    tft.print( "Temperature: ");
    tft.setTextColor (BLACK);
    tft.setCursor(153,43);//Implantation sur l'écran    
    tft.print (old_t);   // on efface la dernière valeur 
    tft.setTextColor ( RED);
    tft.setCursor(153,43);
    tft.println (t);  // on écrit la nouvelle valeur
    tft.println();      
      } 
    
   else {

    tft.setCursor(3, 43);
   tft.setTextSize (2);
   tft.setTextColor (RED);
  tft.print( "Temperature: ");
  tft.setCursor(153,43);      
  tft.println (t );
  tft.println(); 
  
    }

j'ai trouver l'astuce , dans les paramètres de l'afficheur j'ai choisir le mode SOLID au lieu du mode TRANSPARENT. et c'est pas mal , par contre les secondes s’incrémente tous les 3 secondes .