Affichage sur LCD qui "scintille"

Bonjour,

Je modifie actuellement mon code afin de supprimer les instructions delay(), cela fonctionne mais avec un petit bémol.

Mon code initial:

AffichDate();
  delay(1500);
  
  AffichHeure();

Ce qui me donne un affichage stable sur mon lcd de la date pendant le delay puis de l'heure pendant le reste de la boucle.

Mon code modifié:

 while (millis() - DureeAffich < 3000)
      {
        AffichDate(); Serial.print("Date "); 
        AffichEclLed(); Serial.print("EclLed ");
        AffichTempRTC();Serial.println("TempRTC");
        E=1;
      }
  
  
    // Affichage de l'heure
  
    while ((millis() - DureeAffich >= 2000) && (millis() - DureeAffich <= 10000))
      {
        AffichHeure(); Serial.print("Heure ");
        AffichEclPPSec();Serial.println("EclPPSec");
        F=1;
      }
  }
    if (E==1 && F==1)
    {
      DureeAffich=millis(); E=0 ; F=0;
    }

Ce qui me donne un affichage stable de la date mais un affichage qui scintille pour l'heure (assez inesthétique).
Est ce du à l'exécution de la boucle ?
Peut on supprimer cet effet?

Petite précision : les instructions serial sont là pour les essais sur le moniteur série

Merci de votre aide.

Bonjour

Cela provient probablement du fait que les mêmes ordres d'affichage sont envoyés un paquet de fois par seconde au LCD, ce qui ne sert à rien.

On peut avoir le code de AffichDate() et AffichHeure() ?

Bonjour

Voici les codes demandés :

 void AffichHeure()
      {
        lcd.setCursor(0,0); lcd.print("                    ");
        lcd.setCursor(8,0);
        lcd.print(t.hour);
        lcd.print("H");
        if ((t.min) < 10)
          {
            lcd.print("0");
          }
        lcd.print(t.min);
      }

        
  // Affichage de la date
    
  void AffichDate()
      {
        lcd.setCursor(0,0);
        lcd.print(JdlS); lcd.print(" "); lcd.print(t.mday); lcd.print(" ");
        lcd.print(Mois); lcd.print(" "); lcd.print(t.year); lcd.print(" ");
      }

C'est peut être l'instruction d'effacement de ligne qui crée le scintillement?
Mais si je l'efface pas avant d'écrire autre chose les caractères des deux instructions se mélangent.

Salut,

Effectivement ce doit être l'effacement de la ligne puis son ré-affichage qui provoque le scintillement. Il n'est pas nécessaire d'afficher les minutes au niveau de millis(). Dans ta fonction AffichHeure(), tu peux sans doute stocker la valeur de la minute précédente et seulement si la valeur est différente alors tu affiches cette nouvelle valeur.

Ben oui

Tu passes ton temps à effacer et réécrire la même valeur au même endroit, normal que ça scintille.

Essaye donc ceci :

void AffichHeure()
      {
        static byte saved_hour = 24;
        static byte saved_min = 60;
        if (t.hour == saved_hour && t.min == saved_min) return;
        saved_hour = t.hour;
        saved_min = t.min;

        lcd.setCursor(0,0); lcd.print("                    ");
        lcd.setCursor(8,0);
        lcd.print(t.hour);
        lcd.print("H");
        if ((t.min) < 10)
          {
            lcd.print("0");
          }
        lcd.print(t.min);
      }

bonsoir

je teste et je vous dis

Bonjour,

ça ne fonctionne pas, l'affichage reste bloqué sur l'heure stockée à la relance du programme.

En tous cas merci pour l'aide.

Bonjour,

J'ai potassé le truc car je suis novice en la matière, je ne connaissais pas static.

j'arrive à quelque chose mais qui ne me convient pas.

Si j'utilise la solution "static" je n'ai l'affichage de l'heure qu'au changement de minute pour la durée souhaitée mais je dois attendre 1 mn pour avoir de nouveau l'heure alors que je souhaite le contraire : la date pendant une période courte et l'heure pendant beaucoup plus longtemps.

Je continue mes recherches

Merci