Température min et max

Bonjour

Je vais essayer d'expliquer mon problème :

Soit un petit montage pour piloter une plaque de chauffage.
Les données sont :

  • une consigne de température
  • une température mesurée
  • la température maximale qui a été atteinte
  • la température minimale qui a été atteinte

Dans l'ensemble c'est très simple, mais je butte sur la température minimale qui a été atteinte !
En effet je part d'une température basse qui doit monter jusqu'à la consigne. J'ai besoin de savoir ensuite de combien est l'écart au max et au mini.
Pour le max rien de plus simple :

if (buffTempMax < temperature_celcius)
buffTempMax = temperature_celcius;

TempMax = max(buffTempMax, temperature_celcius);

Voilà, rien besoin d'autre (je vous passe la partie affichage et traitement, là n'est pas le soucis).

Par contre pour la température minimale j'ai la tête vide :confused:
Il faudrait tenir compte de la consigne et seulement ensuite faire une vérification. Mais si la T° dépasse à nouveau la consigne ça foire mon truc.
J'ai pas de code à vous proposer hormis du gloubiboulga qui marche pas, je ne sais pas trop comment m'y prendre ou quelle approche avoir !
Ca me paraissais si simple au début mais pourtant je m’emmêle les pinceaux !
Le pire c'est que mon projet est quasi fini mais je butte sur ce truc :sob: :astonished:

Merci pour vos idées, j'espère que j'ai réussi à être clair !

hello, inspire toi de ceci

float temp_min=99;
float temp_max=0;
float temp_mesuree=0;

if (temp_mesuree>temp_max){temp_max=temp_mesuree:}

if (temp_mesuree<temp_min){temp_min=temp_mesuree:}

Bonjour,
deux idées:

  • soit un bouton "reset" pour remettre min et max à la température actuellement mesurée
  • soit un tableau de min max glissant sur une certaine durée à choisir
    en tous les cas il manque la notion de "depuis combien de temps" dans votre indication...
    Cordialement,
    Benoit

il faut peut-etre reformuler plus clairement l'objectif ?

moi ce que je comprends, c'est :

1 - allumage du système, la température est basse mais on s'en fiche
2 - ça chauffe, et ça atteint la valeur de consigne pour la première fois. À partir de là seulement on commence à enregistrer la temp min . J'ai bon ?

si oui alors tu aura très simplement qqch comme :

bool TempMinFlag = false; //une variable pour servir de mémoire du premier dépassement de consigne


if( !TempMinFlag && (temp_celcius > TempConsigne) ) //on teste si on  dépasse la consigne la 1e fois
{
       TempMinFlag = true; //si on la dépasse on le mémorise
       TempMin = temp_celcius; //on mémorise la température actuelle comme base pour le mini

if(TempMinFlag && (TempMin > temp_celcius) )  //si la mémoire est active, on teste si on descend en dessous du mini enregistré     
        TempMin = temp_celcius;  //et si oui on enregistre le nouveau mini

bricofoy:
il faut peut-etre reformuler plus clairement l'objectif ?

moi ce que je comprends, c'est :

1 - allumage du système, la température est basse mais on s'en fiche
2 - ça chauffe, et ça atteint la valeur de consigne pour la première fois. À partir de là seulement on commence à enregistrer la temp min . J'ai bon ?

si oui alors tu aura très simplement qqch comme :

bool TempMinFlag = false; //une variable pour servir de mémoire du premier dépassement de consigne

if( !TempMinFlag && (temp_celcius > TempConsigne) ) //on teste si on  dépasse la consigne la 1e fois
{
      TempMinFlag = true; //si on la dépasse on le mémorise
      TempMin = temp_celcius; //on mémorise la température actuelle comme base pour le mini

if(TempMinFlag && (TempMin > temp_celcius) )  //si la mémoire est active, on teste si on descend en dessous du mini enregistré    
       TempMin = temp_celcius;  //et si oui on enregistre le nouveau mini

Oui c'est exactement ça ! Je vais digérer ça, merci !
Et merci à tous pour vos réponses !

PS trois fois que je change de compte et toujours pas d'alerte email, étrange ce truc...

attention ! il manque un } dans mon code apres le premier if

ce sera donc :

bool TempMinFlag = false; //une variable pour servir de mémoire du premier dépassement de consigne
//cette variable doit être globale et donc déclarée à l'extérieur de loop ou de tout autre fonction

//et ça ensuite ça se passe dans loop()
if( !TempMinFlag && (temp_celcius > TempConsigne) ) //on teste si on  dépasse la consigne la 1e fois
{
       TempMinFlag = true; //si on la dépasse on le mémorise
       TempMin = temp_celcius; //on mémorise la température actuelle comme base pour le mini
}

if(TempMinFlag && (TempMin > temp_celcius) )  //si la mémoire est active, on teste si on descend en dessous du mini enregistré     
        TempMin = temp_celcius;  //et si oui on enregistre le nouveau mini

et pour ce qui est de ton enregistrement de température max, tu peux simplifier :

if (TempMax < temperature_celcius)
    TempMax = temperature_celcius; //il y en a assez avec ça !