Go Down

Topic: Afficher la temperature sur un écran  (Read 195 times) previous topic - next topic

YanisHazard

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);
}

dbrion06

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
Code: [Select]

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


b) lors de la mise à jour de l'afficheur, le nettoyer
Code: [Select]

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.....


lesept

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) :

Code: [Select]
if (abs(exTemp - temperatureC) >= 0.1) {
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

dbrion06

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à....

dbrion06

Je corrige une horreur et donne une idée pour coloriser (cf poste jumeau)
Code: [Select]


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

lesept

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 :)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

dbrion06

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

Go Up