problème de valeur max qui ne change pas

Bonjour , dans mon programme je dois afficher la température actuelle et la température max , la valeur de la temperature max ne change pas ? vous pouvez m’aider ? merci

#include <OneWire.h> // Inclusion de la librairie OneWire
#include <UTFT.h>
#include <UTouch.h>
#include <Wire.h>
#include "RTClib.h"
// Declare which fonts we will be using
extern uint8_t BigFont[];
UTFT        myGLCD(ITDB32S, 38,39,40,41); 
UTouch      myTouch(6,5,4,3,2);
#define DS18B20 0x28     // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 7 // Broche utilisée pour le bus 1-Wire
 
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
 
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp){
  byte data[9], addr[8];
  // data : Données lues depuis le scratchpad
  // addr : adresse du module 1-Wire détecté
 
  if (!ds.search(addr)) { // Recherche un module 1-Wire
    ds.reset_search();    // Réinitialise la recherche de module
    return false;         // Retourne une erreur
  }
   
  if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
    return false;                        // Si le message est corrompu on retourne une erreur
 
  if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
    return false;         // Si ce n'est pas le cas on retourne une erreur
 
  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
   
  ds.write(0x44, 1);      // On lance une prise de mesure de température
  delay(800);             // Et on attend la fin de la mesure
   
  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
  ds.write(0xBE);         // On envoie une demande de lecture du scratchpad
 
  for (byte i = 0; i < 9; i++) // On lit le scratchpad
    data[i] = ds.read();       // Et on stock les octets reçus
   
  // Calcul de la température en degré Celsius
  *temp = ((data[1] << 8) | data[0]) * 0.0625; 
   
  // Pas d'erreur
  return true;
}
 
// setup()
void setup() 
{
  Serial.begin(9600); // Initialisation du port série
 myGLCD.InitLCD();
myGLCD.clrScr();
myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);
myGLCD.setFont(BigFont);
myGLCD.setBackColor(0, 0, 0); 
  
}
 
// loop()
void loop() 
{
  float temp;
  float tempmax;
  if (temp>=tempmax)  //  test température 
  {
    tempmax=temp;  // changement valeur
  }
   
  // Lit la température ambiante à ~1Hz
  if(getTemperature(&temp))
  {
     
    // Affiche la température
    Serial.print("Temperature : ");
    Serial.print(temp);
    Serial.print(tempmax);
    Serial.write(176); // caractère °
    Serial.write('C');       
   Serial.println();
   myGLCD.printNumF(temp,1,0,150);
   myGLCD.printNumF(tempmax,1,0,100);
   
  }
}

Bonjour,

Quand tu fais ceci:

float temp;
float tempmax;
if (temp>=tempmax)  //  test température 
{
  tempmax=temp;  // changement valeur
}

Ca revient à faire:

float tempmax;
if ( 0 >= 0 )  //  test température 
{
  tempmax=0;  // changement valeur
}

Ce qui donne une valeur à ta variable temp c'est:

getTemperature( &temp )

Donc, tu dois déplacer ta condition après la ligne:

if(getTemperature(&temp))

De plus, tu doit déclarer la variable tempMax en static, de sorte qu'elle ne soit pas constamment redéclarée (et donc perde sa valeur) à chaque loop().

Comme çà:

void loop()
{
  float temp;
  static float tempmax;

  // Lit la température ambiante à ~1Hz
  if(getTemperature(&temp))
  {
    if (temp>=tempmax)  //  test température 
    {
      tempmax=temp;  // changement valeur
    }
    ...

Merci beaucoup pour les solutions , ça fonctionne maintenant