BMP 180 moyenne et différence d'altitude

Bonjour,

J'ai brancher sur un Arduino UNO un capteur BMP180 et un écran LCD I2C 16/2 .

Ce que je voudrais faire c'est calculer une Altitude de référence ( disons Ar ) , dans le setup, qui serait la moyenne des 10 premières mesures du capteur BMP180 et la "stocker" pour la réutiliser dans le loop.

Ensuite je voudrais faire la différence entre l'altitude actuellement lue ( Ar) et l'altitude de référence pour que lorsque cette différence soit supérieur à une valeur donnée ( que je fixerai plus tard ) , un message s'affiche sur l'écran LCD.

Voici le programme que j'ai actuellement :

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


// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here

Adafruit_BMP085 bmp;
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#define ADDRESS_SENSOR 0x77                 // Addresse du capteur
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

  
void setup() {
  {
  lcd.init();                      // initialize the lcd 
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Amis Geocacheurs!");
  lcd.setCursor(3,1);
  lcd.print("T5 ou PAS!");
  delay(5000);
  lcd.init();
}



  delay(5000);
  Serial.begin(115200);
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }
}
  
void loop() {
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");
    
    Serial.print("Pressure = ");
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");


    lcd.setCursor(4,0);
  lcd.print("Altitude");
    // Calculate altitude assuming 'standard' barometric
    // pressure of 1013.25 millibar = 101325 Pascal
   Serial.print("Altitude = ");

    lcd.setCursor(1,1);
    lcd.print(bmp.readAltitude());
    lcd.println(" metres  ");

  // you can get a more precise measurement of altitude
  // if you know the current sea level pressure which will
  // vary with weather and such. If it is 1015 millibars
  // that is equal to 101500 Pascals.
    Serial.print("Real altitude = ");
    Serial.print(bmp.readAltitude(101500));
    Serial.println(" meters");
    
    Serial.println();
    delay(2000);
}

Merci d'avance, un débutant arduiniste :slight_smile: .

pourquoi deux fois ?

  lcd.init();                      // initialize the lcd 
  lcd.init();

et pourquoi mettre une partie entre {} dans le setup

void setup() {
  {...}
...}

quel intérêt ?

vous ne lisez pas votre valeur initiale dans le setup ? faites une boucle effectivement de 10 lectures et prenez la moyenne comme valeur de départ. Ensuite suffit de comparer à la valeur lue dans le loop()

J'ai supprimé la deuxième init. je ne l'avais pas remarqué.
Par contre je ne comprends pas votre deuxième remarque

J-M-L:
et pourquoi mettre une partie entre {} dans le setup

void setup() {

{...}
...}



quel intérêt ?

Par contre puis-je me servir de la fonction "for" comme vous l'aviez dit dans un ancien post afin de calculer ma moyenne?

for (ta_mesure = 0,  i=0; i <= 10 ; i++)  ta_mesure += lireCapteur();
moyenne = ta_mesure / 10;

vous avez un truc dans le setup() dans sa propre paire d'accolade. ça ne sert à rien.

sinon oui, (presque) tout à fait c'est comme cela qu'il faut faire pour la moyenne. assurez vous que ta_mesure soit du bon type et attention ici vous faites 11 mesures, pas 10 :slight_smile: donc la moyenne telle que calculée est fausse