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
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
Merci pour vos idées, j'espère que j'ai réussi à être clair !
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:}
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 !