#include "Wire.h"
#include "SFE_BMP180.h"

SFE_BMP180 pressure; // создаем объект pressure
#define ALTITUDE 1655.0 // высота офиса SparkFun, штат Колорадо, в метрах

void setup(){
   Serial.begin(9600);  // запускаем монитор порта
   pressure.begin();     // запускаем датчик давления
}

void loop(){
   char status;
   double T,P,p0,a;

   // для точного измерения, следует знать высоту, на которой производятся замеры
   // в этом примере используется константа ALTITUDE
   Serial.println();
   Serial.print("provided altitude: ");
   Serial.print(ALTITUDE,0);
   Serial.println(" meters");
  
   // перед измерением давления, следует узнать температуру
   // если запрос успешен, то возвращается время ожидания в миллисекундах
   // если запрос на измерение температуры не успешен, то возвращается 0
   status = pressure.startTemperature();
   if (status != 0){
      delay(status);

      // результат измерения температуры сохраняется в переменной T
      status = pressure.getTemperature(T);
      if (status != 0){
         Serial.print("temperature: ");
         Serial.print(T,2);
         Serial.println(" deg C");

         // запускаем измерение давления
         // если запрос успешен, возвращается время ожидания в миллисекундах
         // если запрос на измерение давления не успешен, возвращается 0
         status = pressure.startPressure(3);
         if (status != 0){
            delay(status);

            status = pressure.getPressure(P,T);
            if (status != 0){
               Serial.print("absolute pressure: ");
               Serial.print(P,2);
               Serial.print(" mb, ");
               Serial.print(P*0.0295333727,2);
               Serial.println(" inHg");

              // датчик bmp180 возвращает абсолютное давление, которое зависит от высоты
              // параметры: P = абсолютное давление в мб, ALTITUDE = текущая высота в м.
              // результат: p0 = давление с компенсацией на уровне моря в мбар
              p0 = pressure.sealevel(P,ALTITUDE);
              Serial.print("relative (sea-level) pressure: ");
              Serial.print(p0,2);
              Serial.print(" mb, ");
              Serial.print(p0*0.0295333727,2);
              Serial.println(" inHg");
           }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(5000);
}