#include <SFE_BMP180.h>
#include <Wire.h>
#include <Servo.h>

// You will need to create an SFE_BMP180 object, here called "pressure":

SFE_BMP180 pressure;

Servo servo;
int GREENLED=9;
int REDLED=10;
int Check_downs = 0;

double baseline; // baseline pressure

void setup()
{
  Serial.begin(9600);
  Serial.println("REBOOT");

  // Initialize the sensor (it is important to get calibration values stored on the device).
  pinMode(REDLED,OUTPUT);
  pinMode(GREENLED,OUTPUT);
  if (pressure.begin()){
    Serial.println("BMP180 init success");
  }
  else
  {
    
    Serial.println("BMP180 init fail (disconnected?)\n\n");
    while(1); // Pause forever.
  }

  // Get the baseline pressure:
  
  baseline = getPressure();
  
  Serial.print("baseline pressure: ");
  Serial.print(baseline);
  Serial.println(" mb");
  Serial.print("baseline pressure: ");
  Serial.print(baseline/33.864,0);
  Serial.println(" Inhg");  
  
  servo.attach(5); 
  servo.write(90); //sets servo to its midpoint
}

void loop()
{servo.write(90);
delay(10);
  double a,P,a1,a2,P2,Difference;
  
  // Get a new pressure reading:
  
  // Show the relative altitude difference between
  // the new reading and the baseline reading:
  
  //a = pressure.altitude(P,baseline);

  //Serial.print("relative altitude: ");
  //if (a >= 0.0) Serial.print(" "); // add a space for positive numbers
  //Serial.print(a,1);
  //Serial.print(" meters, ");
  //if (a >= 0.0) Serial.print(" "); // add a space for positive numbers
  
  P = getPressure();
  
  a1 = pressure.altitude(P,baseline);

  delay(3000);
  
  P2 = getPressure();
  
  a2 = pressure.altitude(P2,baseline);

  Difference = a2 - a1;
  if (abs(Difference) > 1) {
    if (Difference < 0 ) Check_downs =+ 1;  
    if (Difference > 0 ) Check_downs = 0;  
  }
  
  Serial.print("Start >");
  Serial.print(a1);
  Serial.print(" meter >");
  Serial.println(a2);
 
  Serial.print("Difference: ");
  Serial.print(a1 - a2);
  Serial.println("meters");
  Serial.print("Check downs : ");
  Serial.print(Check_downs);
  Serial.println();

  if (Check_downs == 3) {
    servo.write(90);
     digitalWrite(REDLED,LOW);
  digitalWrite(GREENLED,HIGH);
  
  }
  else
  { digitalWrite(REDLED,HIGH);
  digitalWrite(GREENLED,LOW);
  }
  delay(1000);

}


double getPressure()
{
  char status;
  double T,P,p0,a;

  
  status = pressure.startTemperature();
  if (status != 0)
  {
    // Wait for the measurement to complete:

    delay(status);

    
    status = pressure.getTemperature(T);
    if (status != 0)
    {
     
      status = pressure.startPressure(3);
      if (status != 0)
      {
        // Wait for the measurement to complete:
        delay(status);

        // Retrieve the completed pressure measurement:
        // Note that the measurement is stored in the variable P.
        // Use '&P' to provide the address of P.
        // Note also that the function requires the previous temperature measurement (T).
        // (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
        // Function returns 1 if successful, 0 if failure.

        status = pressure.getPressure(P,T);
        if (status != 0)
        {
          return(P);
        }
        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");
}
