Afficher la temperature sur un écran

Bonjour, j’ai un pb avec mon programme, lorsque j’affiche la temp sur l’écran elle s’affiche mais ne supprime pas lancienne donnée du coup je me retrouve avec des chiffres collés genre 21,27C22,0C21,90C …
que dois je rajouter à mon code pour que une nouvelle valeur s’affiche sans que la précedente reste à l’écran

#include <LiquidCrystal.h>
#include “rgb_lcd.h”

rgb_lcd lcd;

const byte colorR = 255;
const byte colorG = 255;
const byte colorB = 255;

void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);

}

void loop()
{

int reading = analogRead(A0);
float voltage = reading * 5.0;
voltage /= 1024.0;
float temperatureC = (voltage - 0.5) * 100 ;
int val = temperatureC;

lcd.print(temperatureC);
lcd.print(" Degres ");
delay(2000);
}

Bon:
il faut faire deux chose:
a) ne pas mettre à jour l'afficheur si la température varie peu; il vous faut donc une trace de la température ancienne (disons int exTemp = -999; (peu physique)
la gestion de la température devient alors

if (exTemp != temperatureC) {
  mettreAJour();
  exVal = temperatureC;

b) lors de la mise à jour de l'afficheur, le nettoyer

void  mettreAJour() {
      lcd.clear();  
      lcd.setCursor(0,0); // le clear le fait déjà, mais permet evolutions
     // lcd.setRGB(colorR, colorG, colorB); Sert elle à ce stade?
     lcd.print(temperatureC);
    lcd.print(" Degres ");

Nota : avec cette astuce de ne rafraîchir que si la température varie, (et de rafraîchir effectivement), vous pouvez vous passer du delay(2000) sans clognotements désagréables.....

Si les deux valeurs sont des float, il faut laisser un petit intervalle autour de la valeur précédente (ici un dixième de degré, ce qui est déjà très précis) :

if (abs(exTemp - temperatureC) >= 0.1) {

J'avais confondu, en tapant à la volée, val (qui, soit dit en passant, ne sert à rien) , un entier (et les fluctuations de 1 degré garantissent un affichage stable...) et températureC, un float .... Heureusement que lesept était là....

Je corrige une horreur et donne une idée pour coloriser (cf poste jumeau)

void  mettreAJour() {
      lcd.clear(); 
      lcd.setCursor(0,0); // le clear le fait déjà, mais permet evolutions
     // lcd.setRGB(colorR, colorG, colorB); Sert elle à ce stade?
     if (temperatureC > 21.5) {
        lcd.setRGB(255, 0, 0);  // chaud et rouge
     } else {
        if (temperatureC < 18.5) {
           lcd.setRGB(0, 0, 255);  // froid et bleu

         } else lcd.setRGB(0, 255,0); // tiède te vert
    
    } 
    lcd.print(temperatureC);
    lcd.print(" Degres ");
} // corrige une de mes horreurs

Ta gestion du if / else if est un peu déséquilibrée...

Tu devrais mettre un peu d'hystérésis sinon au niveau des deux limites, l'écran risque de ressembler à un sapin de Noël :slight_smile:

L'hysteresis est déjà dans le code que vous avez passé (0.1 C)... et puis, c'est joli, un écran animé...