Effacer des valeurs affichées à l'écran si modifications...

Bonsoir,
Je planche sur un projet de régulation climatique pour mes bestioles en prenant en compte l’année sous la forme de jours juliens.
Je définis donc différentes périodes comme suit (je ne mets qu’un extrait) :

byte getPeriode() { // definition des periodes pour appliquer les consignes climatiques
    DateTime now = RTC.now();
    jourAnActuel = ((now.month() - 1)) * 30 + now.day();
    byte periode = 0;
      if ((jourAnActuel <= 31) || (jourAnActuel >= 305)) { // Novembre à Janvier - Repos/Diapause
        periode = 1;
      }
      if ((jourAnActuel > 31) && (jourAnActuel < 60)) { // Fevrier - Reprise activite
        periode = 2;
      }…

Puis, dans mon loop, je rappelle ces période pour travailler avec :

void loop() {
  GetTimeFromRTC();
  TempCTN(); // Mesure des temperatures
  maPeriode = getPeriode();
  switch (maPeriode){ // Determination de la periode climatique et des consignes
    case 1:
        DureeJour = DureeJourRepos; // Temps seconde 8h
        TempJourAmbiant = 13;
        TempNuitAmbiant = 13;
        TempJourNid = 13;
        TempNuitNid = 13;
        TempJourADC = 18;
        TempNuitADC = 13;
        TempJourTrop = 25;
        TempNuitTrop = 20;
        tft.fillRect (335,45,120,20,Yellow); // Effacement zone periode
        tft.setCursor(345,45);tft.setTextColor(Black);tft.setTextSize(1,2);tft.print("REPOS-DIAPAUSE");
        AffichageData();
        FonctionRelais();
        break;
    case 2:
        DureeJour = DureeJourRepos + ((jourAnActuel - 31) * 1028,57);
        TempJourAmbiant = 13 + ((jourAnActuel -31) * 0.46);
        TempNuitAmbiant = 13 + ((jourAnActuel -31) * 0.36);
        TempJourNid = 13 + ((jourAnActuel -31) * 0.42);
        TempNuitNid = 13 + ((jourAnActuel -31) * 0.42);
        TempJourADC = 18 + ((jourAnActuel -31) * 0.36);
        TempNuitADC = 13 + ((jourAnActuel -31) * 0.36);
        TempJourTrop = 25 + ((jourAnActuel -31) * 0.11);
        TempNuitTrop = 20 + ((jourAnActuel -31) * 0.11);
        tft.fillRect (335,45,120,20,Yellow); // Effacement zone periode
        tft.setCursor(347,47);tft.setTextColor(Black);tft.setTextSize(1,2);tft.print("REPRISE ACTIVITE");
        AffichageData();
        FonctionRelais();
        break;

Pour obtenir ceci

Je voudrais effacer juste les valeurs affichées sur la droite de l’écran sachant qu’elles bougent bien évidemment pour les saisons intermédiaires lors du passage en période de repos ou de reprise d’activité.
Aussi, mais peut être que je me goure complètement et me complique l’esprit, je voulais savoir si je peux faire un truc du style (pour case 2 au moins, pour case 1 heu…) :

Case 2 :
For (jourAnActuel=32 ;jourAnActuel<60 ;jourAnActuel++) {
DureeJour [jourAnActuel]= DureeJourRepos; // Temps seconde 8h
        TempJourAmbiant[jourAnActuel] = 13;
        TempNuitAmbiant[jourAnActuel] = 13;
ect….
If (DureeJourOld [jourAnActuel] <> DureeJour [jourAnActuel]) {
	// Efface la zone d’affichage valeurs
	// Affiche la nouvelle zone valeurs
}
        tft.fillRect (335,45,120,20,Yellow); // Effacement zone periode
        tft.setCursor(345,45);tft.setTextColor(Black);tft.setTextSize(1,2);tft.print("REPOS-DIAPAUSE");

DureeJourOld [jourAnActuel]=DureeJour [jourAnActuel] ;
        TempJourAmbiantOld [jourAnActuel] = TempJourAmbiant [jourAnActuel];
        TempNuitAmbiantOld[jourAnActuel] = TempNuitAmbiant[jourAnActuel];
        etc….

        AffichageData();
        FonctionRelais();
        break;

Je sais ça va faire de la ligne si c’est possible :frowning:
Sinon y a t’il une autre solution à envisager et dans ce cas help,… coup de patte svp !
Merci et bonne soirée

pas de magie, pour effacer une zone il faut la peindre dans la couleur du fond... ensuite on peut écrire par dessus. (si on est en police de taille fixe on peut aussi écrire un bloc de texte de la bonne longueur avec une couleur de fond et ça écrase ce qu'il y avait avant)

Salut, me doutais bien mais je voulais juste savoir s'il n'y avait pas une autre astuce pour éviter dans sursauts dans l'écran du coup, histoire de n'effacer que si la valeur change. Bon ben je sais ce qui me reste à faire alors. Merci en tout de la réponse et bonne soirée

Oui il faut surtout essayer de mettre à jour que la partie nécessaire et quand c’est nécessaire

Trouvé et c'était tout bête il suffisait d'écrire les valeurs en mettant une couleur de fond identique à celle de l'écran (J'avais pas toutes les commandes pour mon écran et je viens de les trouver complètement par hasard)

tft.setTextColor(White,Black); tft.print ("...");

les ... correspondent à la valeur à écrire

Et du coup fini les sursauts d'écran

Attention: si vous n'effacez pas d'abord ce qu'il y avait avec la même technique (ce que je disais en #1 avec "on peut aussi écrire un bloc de texte de la bonne longueur avec une couleur de fond et ça écrase ce qu'il y avait avant") vous risquez d'avoir un affichage incohérent.

par exemple si vous aviez 123 écrit auparavant et que la nouvelle valeur est 98, le 9 va écraser le 1, le 8 va écraser le 2 mais rien ne va effacer le 3 et vous verrez à l'écran 983 (sans les couleurs bien sûr) et donc vous aurez une lecture erronée de la valeur qui sera bien correcte dans le code.

il faut donc écraser 123 avec comme couleur de dessin du texte et couleur de fond la même couleur, celle du fond puis venir écrire 98. comme ça le 3 aura bien été effacé.

sinon il faut rajouter des espaces pour que l'affichage prenne toujours le même nombre de caractères

C'est vrai, je suis d'accord sauf que je n'ai pas précisé que dans mon cas j'ai le même nombre de caractères donc pas de souci :wink:
Bonne soirée