Pb Variomètre avec Attiny85+BMP085 en I²C

Bon,

ne comprenant pas tout du code que j'utilisais à la base je suis repartis de l'exemple arduino pour le capteur BMP085 et j'ai tapé un peu de code. Mon écriture est surement un peu "lourde" mais elle à le mérite de fonctionner.
L'écriture et certaines variables restent à affiner. Pour ceux que ça interresse:

//Afficher Pression et température capteur BMP085
//Gestion par Attiny85
//LCD 16x2
//SDA pin 5 SCK pin 6


#include <TinyWireM.h>
#define BMP085_ADDRESS 0x77
const unsigned char OSS = 3;
int ac1;
int ac2; 
int ac3; 
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1; 
int b2;
int mb;
int mc;
int md;
long b5; 

short temperature;
long pressure;
   

long previousMillis = 0;        
long tempo = 1000;
long previousPressure = 0;
int vario = 0;

void setup()
{
  TinyWireM.begin();
  bmp085Calibration();   
}

void loop() {

  temperature = bmp085GetTemperature(bmp085ReadUT());
  pressure = bmp085GetPressure(bmp085ReadUP()); 
   
   unsigned long currentMillis = millis();
   long currentPressure = pressure;
   
   if(currentMillis - previousMillis > tempo) {
     int vario = previousPressure - currentPressure;


     if (vario <= -30 ){
       tone (1,500,700);        //si vario < 2,5 m/s
     }
     if (vario >=8 && vario<12) {
        tone (1,1000,500);       // si   0,5m/s < vario <1m.s
     }
     if (vario >=12 && vario<18) {
        tone (1,1100,100);
        delay (200);
        tone (1,1100,100);       // si   1m/s < vario <1,5m/s
     }
     if (vario >=18 && vario<24) {
        tone (1,1200,90);
        delay (200);
        tone (1,1200,90);
        delay (200);
        tone (1,1200,90);       // si   1,5m/s < vario <2m/s
     }

     if (vario >=18 && vario<24) {
        tone (1,1300,80);
        delay (150);
        tone (1,1300,80);
        delay (150);
        tone (1,1300,80);
        delay (150);
        tone (1,1300,80);       // si   2m/s < vario <3m/s
     }
     if (vario >=24 ) {

        tone (1,1400,70);
        delay (150);
        tone (1,1400,70);
        delay (150);
        tone (1,1400,70);
        delay (150);
        tone (1,1400,70);
        delay (150);
        tone (1,1400,70);       // si   vario > 3
     }
     
   previousMillis = currentMillis;
   previousPressure = currentPressure;
  }   
}

  void bmp085Calibration() {
    
  ac1 = bmp085ReadInt(0xAA);
  ac2 = bmp085ReadInt(0xAC);
  ac3 = bmp085ReadInt(0xAE);
  ac4 = bmp085ReadInt(0xB0);
  ac5 = bmp085ReadInt(0xB2);
  ac6 = bmp085ReadInt(0xB4);
  b1 = bmp085ReadInt(0xB6);
  b2 = bmp085ReadInt(0xB8);
  mb = bmp085ReadInt(0xBA);
  mc = bmp085ReadInt(0xBC);
  md = bmp085ReadInt(0xBE);
}

short bmp085GetTemperature(unsigned int ut)
{
  long x1, x2;
  
  x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
  x2 = ((long)mc << 11)/(x1 + md);
  b5 = x1 + x2;

  return ((b5 + 8)>>4);  
}

long bmp085GetPressure(unsigned long up)
{
  long x1, x2, x3, b3, b6, p;
  unsigned long b4, b7;
  
  b6 = b5 - 4000;
  // Calculate B3
  x1 = (b2 * (b6 * b6)>>12)>>11;
  x2 = (ac2 * b6)>>11;
  x3 = x1 + x2;
  b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
  
  // Calculate 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<<1)/b4;
  else
    p = (b7/b4)<<1;
    
  x1 = (p>>8) * (p>>8);
  x1 = (x1 * 3038)>>16;
  x2 = (-7357 * p)>>16;
  p += (x1 + x2 + 3791)>>4;
  
  return p;
}

char bmp085Read(unsigned char address)
{
  unsigned char data;
  
  TinyWireM.beginTransmission(BMP085_ADDRESS);
  TinyWireM.send(address);
  TinyWireM.endTransmission();
  
  TinyWireM.requestFrom(BMP085_ADDRESS, 1);
  while(!TinyWireM.available())
    ;
    
  return TinyWireM.receive();
}

int bmp085ReadInt(unsigned char address)
{
  unsigned char msb, lsb;
  
  TinyWireM.beginTransmission(BMP085_ADDRESS);
  TinyWireM.send(address);
  TinyWireM.endTransmission();
  
  TinyWireM.requestFrom(BMP085_ADDRESS, 2);
  while(TinyWireM.available()<2)
    ;
  msb = TinyWireM.receive();
  lsb = TinyWireM.receive();
  
  return (int) msb<<8 | lsb;
}

unsigned int bmp085ReadUT()
{
  unsigned int ut;
  
  TinyWireM.beginTransmission(BMP085_ADDRESS);
  TinyWireM.send(0xF4);
  TinyWireM.send(0x2E);
  TinyWireM.endTransmission();
  
  // Wait at least 4.5ms
  delay(20);
  
  // Read two bytes from registers 0xF6 and 0xF7
  ut = bmp085ReadInt(0xF6);
  return ut;
}

// Read the uncompensated pressure value
unsigned long bmp085ReadUP()
{
  unsigned char msb, lsb, xlsb;
  unsigned long up = 0;
  
  // Write 0x34+(OSS<<6) into register 0xF4
  // Request a pressure reading w/ oversampling setting
  TinyWireM.beginTransmission(BMP085_ADDRESS);
  TinyWireM.send(0xF4);
  TinyWireM.send(0x34 + (OSS<<6));
  TinyWireM.endTransmission();
  
  // Wait for conversion, delay time dependent on OSS
  delay(20 + (3<<OSS));
  
  // Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)
  TinyWireM.beginTransmission(BMP085_ADDRESS);
  TinyWireM.send(0xF6);
  TinyWireM.endTransmission();
  TinyWireM.requestFrom(BMP085_ADDRESS, 3);
  
  // Wait for data to become available
  while(TinyWireM.available() < 3)
    ;
  msb = TinyWireM.receive();
  lsb = TinyWireM.receive();
  xlsb = TinyWireM.receive();
  
  up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
  
  return up;
  
  
}

Il me reste à le tester en vol (la météo ne s'y prêtant pas en ce moment).

Bon vol !!!!