comparer deux valeurs

Bonjour à tous !

je suis entrain de programmer un petit baromètre à partir d'un module barométrique i2c et afficheur tft et je suis confronté à un problème : je ne sais pas comment je peux mettre un avis de tendance, c'est à dire le mot "hausse" quand la pression augmente par rapport à la dernière mesure et un autre mots"baisse" quand la pression baisse ( idem ) !
pouvez vous m'éclairer sur le sujet ??

photonnoir:
Bonjour à tous !

je suis entrain de programmer un petit baromètre à partir d'un module barométrique i2c et afficheur tft et je suis confronté à un problème : je ne sais pas comment je peux mettre un avis de tendance, c'est à dire le mot "hausse" quand la pression augmente par rapport à la dernière mesure et un autre mots"baisse" quand la pression baisse ( idem ) !
pouvez vous m'éclairer sur le sujet ??

Bonjour,

Calculer la variation entre deux situations successives (entre n et n-1) .

Variation positive => augmentation
Variation négative => diminution

Serge .D

Il te faut créer une variable qui contient l'ancienne valeur de la pression.
Un exemple de pseudo-code :

ancienne_pression = pression_courante
pression_courante = "ici ta commande pour faire la mesure"
si pression_courante - ancienne_pression>0 afficher "hausse" sinon afficher "baisse"

// programme simple afficheur utft glue

#include <Adafruit_GFX.h>
#include <UTFTGLUE.h> // class methods are in here
UTFTGLUE myGLCD(0x0154,A2,A1,A3,A4,A0);

const int capteurco = A15;
int capteurcoValue = 0;

#include <Wire.h>
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

void setup() {
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
myGLCD.setTextSize(3);
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}

void loop() {
myGLCD.clrScr();
myGLCD.setColor(0, 0, 255);
myGLCD.print("bonjour !!", 100, 0);
int capteurcoValue = analogRead(capteurco);
myGLCD.print("monoxyde", 0, 40);
myGLCD.setColor(255, 255, 0);
float pourcentage = capteurcoValue * ( 100.0 / 1023.);
myGLCD.printNumI(pourcentage, 160, 40);
myGLCD.print("%", 220, 40);
myGLCD.setColor(255, 0, 255);
myGLCD.print("temperature", 0, 80);
myGLCD.setColor(255, 255, 0);
myGLCD.printNumI(bmp.readTemperature(), 220, 80);
myGLCD.setColor(0, 255, 255);
myGLCD.print("Pression", 0, 120);
myGLCD.setColor(255, 255, 0);
myGLCD.printNumI(bmp.readPressure(), 190, 120);
if(bmp.readPressure()== bmp.readPressure()){
myGLCD.print("Pression stable", 0, 160);
}
if(bmp.readPressure()<= bmp.readPressure()){
myGLCD.print("Pression augmente", 0, 160);
} else {
myGLCD.print("Pression diminue", 0, 160);
}
delay(2000);

}

Voilà le code, il fonctionne à part les indications stable, diminue et augmente qui sont très alléatoire, je sais que ce code n'est pas juste mais je ne comprend pas comment le coder pour qu'il réagisse bien convenablement !!

photonnoir:
Voilà le code, il fonctionne à part les indications stable, diminue et augmente qui sont très aléatoire, je sais que ce code n'est pas juste mais je ne comprend pas comment le coder pour qu'il réagisse bien convenablement !!

J'ai l'impression que ce code compare les valeurs de deux mesures successives, mais que ces mesures sont faites avec un intervalle très court. Donc, le bruit de mesure est prépondérant et rend la différence aléatoire. Il vaut mieux stocker l'ancienne valeur et la comparer avec la mesure courante, avec un délai entre les deux qui permet au capteur de se stabiliser. Éventuellement, comparer la différence avec un seuil :

si différence > seuil afficher "en hausse"
sinon si différence < -seuil afficher "en baisse"
sinon afficher "stable"

re
voilà, j'ai essayer de mettre des delay ( entre 10 et 100 millisecondes) et le résultat est pareil, c'est aléatoire
je pense qu'il faut memoriser l'avant dernière valeur et la comparer avec la dernière, c'est claire çà, mais je ne sais pas comment mettre en oeuvre ce programme !

pour l'instant, j'ai effacé ce besoin, mais je voudrai tout de même trouver comment faire car c'est très intéressant comme fonction !!

merci pour vos réponse

voilà, j'ai essayer de mettre des delay ( entre 10 et 100 millisecondes)

Que représente 0,1s à l'échelle de temps des variations atmosphérique ?
Quel est le temps de réponse du capteur de pression atmosphérique ?

Ne crois tu pas que l’intervalle entre deux mesures devrait plutôt être de l'ordre du quart d'heure ?

oui, tu as raison, je vais voir çà, merci !!

lesept:
J'ai l'impression que ce code compare les valeurs de deux mesures successives, mais que ces mesures sont faites avec un intervalle très court. Donc, le bruit de mesure est prépondérant et rend la différence aléatoire. Il vaut mieux stocker l'ancienne valeur et la comparer avec la mesure courante, avec un délai entre les deux qui permet au capteur de se stabiliser. Éventuellement, comparer la différence avec un seuil :

si différence > seuil afficher "en hausse"
sinon si différence < -seuil afficher "en baisse"
sinon afficher "stable"

Bonjour

c'est un capteur d’oxygène, les valeurs vont donc monter / descendre régulièrement
en sortie je souhaite avoir 3 led
1 en dessous X1
2 entre X1 et X2
3 au dessus de X2

Bonjour,

j'ai trouvé !

Je partage donc mon code

  if ( abs(cel1 - cel2) < ppo2 && abs(cel2 - cel3) < ppo2 && abs(cel3 - cel1) < ppo2 )
  { reel = (cel1 + cel2 + cel3) / 3; // Moyenne sur 3 cel
    lcd.setCursor(0, 3);
    lcd.print("Reel = ");
    lcd.print(reel, 2);
    lcd.print(" mV");
  }
  else if ( abs(cel1 - cel2) < ppo2 ) {
    reel = (cel1 + cel2 ) / 2; // Moyenne sur 2 cel
    lcd.setCursor(0, 3);
    lcd.print("Reel = ");
    lcd.print(reel, 2);
    lcd.print(" mV");
  }
  else if ( abs(cel2 - cel3) < ppo2 ) {
    reel = (cel2 + cel3 ) / 2; // Moyenne sur 2 cel
    lcd.setCursor(0, 3);
    lcd.print("Reel = ");
    lcd.print(reel, 2);
    lcd.print(" mV");
  }
  else if ( abs(cel3 - cel1) < ppo2 ) {
    reel = (cel3 + cel1 ) / 2; // Moyenne sur 2 cel
    lcd.setCursor(0, 3);
    lcd.print("Reel = ");
    lcd.print(reel, 2);
    lcd.print(" mV");
  }
  else {
    lcd.setCursor(0, 3);
    lcd.print("erreur");

  }