Probleme Capteur sur arduino

Postby xezi536 » Wed Feb 19, 2014 12:00 am

Bonjour,

voila dans le cadre d'un projet j'ai été en charge du capteur BMP085, un altimètre permettant de relever la pression atmosphérique pour y déterminer l'altitude. Le programme fonction bien, la pression change sans arrêt. Pour plus de précision je dois relever 5 fois la valeur de la pression ainsi que 5 fois la valeur de l'altitude, en faire une moyenne et l'afficher .
Mais étant débutant je ne sais pas comment faire ...
Je sollicite un peu d'aide !
ps: je pense que les modification à apporter doivent se trouver dans la fonction "loop" ??

voici le programme:

#include

//L'adresse I2C du BMP085
#define BMP085_ADDRESS 0x77

// Lit 1 byte du BMP085 à 'address'
char bmp085ReadChar(unsigned char address)
{
unsigned char data;

Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();

Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available());

return Wire.read();
}

// Lit 2 bytes sur le BMP085
// Le premier byte vient de 'address'
// Le second byte vient de 'address'+1
int bmp085ReadInt(unsigned char address)
{
unsigned char msb, lsb;

Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();

//on va lire 2 bytes, correspondant à un integer
Wire.requestFrom(BMP085_ADDRESS, 2);

//Attendons que les 2 bytes soient arrivés...
while(Wire.available() > (8-OSS);

return up;
}


// Calcule la température à partir de ut.
// La valeur de sortie est exprimée en dixièmes de degrés.
short bmp085GetTemperature( int ut)
{
long x1, x2;

x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc >4);
}

// Calcule la pression à partir de up.
// Les valeurs de calibration doivent être initialisées.
// b5 est aussi requise, donc bmp085GetTemperature(...) doit être appelée en premier.
// La valeur de sortie est exprimée en Pascals.
long bmp085GetPressure(unsigned long up)
{
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;

b6 = b5 - 4000;
// Calcule B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3) >2;

// Calcule B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;

b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 < 0x80000000)
p = (b7 >8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;

return p;
}

//Retourne l'altitude théorique
//en fonction de la pression atmosphérique
float getAltitude(long pressure)
{
// Pression au niveau de la mer (Pa)
const float p0 = 101325;
float altitude = (float)44330 * (1 - pow(((float) pressure/p0), 0.190295));
return altitude;
}



//Calculons tout ça dans la boucle principale, et envoyons les résultats dans le port série:

void loop()
{
temperature = bmp085GetTemperature(bmp085ReadUT());
pressure = bmp085GetPressure(bmp085ReadUP());
float altitude = getAltitude(pressure);

Serial.println("***********************");
Serial.print("Temperature: ");
Serial.print(((float)temperature / 10), 1);
Serial.println(" degres");

Serial.print("Pression: ");
Serial.print(pressure, DEC);
Serial.println(" Pascals");

Serial.print("Altitude: ");
Serial.print((int)altitude, DEC);
Serial.println(" metres");

delay(1000);
}
xezi536
 
Posts: 1
Joined: Thu Mar 13, 2014 10:18 am

Return to Analyseur OBD-2 (07/08-2005)

Who is online

Users browsing this forum: No registered users and 1 guest