Arduino Forum

International => Français => Topic started by: EGT59 on Aug 11, 2017, 10:07 am

Title: Affichage sur LCD qui "scintille"
Post by: EGT59 on Aug 11, 2017, 10:07 am
Bonjour,

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

Mon code initial:
Code: [Select]
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é:
Code: [Select]
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.
Title: Re: Affichage sur LCD qui "scintille"
Post by: bricoleau on Aug 11, 2017, 10:55 am
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() ?
Title: Re: Affichage sur LCD qui "scintille"
Post by: EGT59 on Aug 11, 2017, 03:46 pm
Bonjour

Voici les codes demandés :

Code: [Select]
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.
Title: Re: Affichage sur LCD qui "scintille"
Post by: landid on Aug 11, 2017, 04:21 pm
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.

Title: Re: Affichage sur LCD qui "scintille"
Post by: bricoleau on Aug 11, 2017, 04:28 pm
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 :
Code: [Select]
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);
      }
Title: Re: Affichage sur LCD qui "scintille"
Post by: EGT59 on Aug 11, 2017, 11:59 pm
bonsoir

je teste et je vous dis
Title: Re: Affichage sur LCD qui "scintille"
Post by: EGT59 on Aug 12, 2017, 10:08 am
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.
Title: Re: Affichage sur LCD qui "scintille"
Post by: EGT59 on Aug 13, 2017, 09:51 am
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