#define LED_PIN 9

const int xInput = A0;
const int yInput = A1;
const int zInput = A2;

// initialize minimum and maximum Raw Ranges for each axis
int RawMin = 0;
int RawMax = 1023;

// Take multiple samples to reduce noise
const int sampleSize = 10;

void setup() 
{
  analogReference(EXTERNAL);
  pinMode( LED_PIN, OUTPUT );
  Serial.begin(9600);
}

void loop() 
{


  
  
  //Read raw values
  int xRaw = ReadAxis(xInput);
  int yRaw = ReadAxis(yInput);
  int zRaw = ReadAxis(zInput);

  // Convert raw values to 'milli-Gs"
  long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
  long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
  long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

  // re-scale to fractional Gs
  float xAccel = xScaled / 1000.0;
  float yAccel = yScaled / 1000.0;
  float zAccel = zScaled / 1000.0;

  if (detectChute(xAccel, yAccel, zAccel)) {
        Serial.println("Down");
        delay(200); 
        digitalWrite( LED_PIN, HIGH );
        delay(2000); 
        digitalWrite( LED_PIN, LOW );

  }
 

}

// Take samples and return the average
int ReadAxis(int axisPin)
{
  long reading = 0;
  analogRead(axisPin);
  delay(1);
  for (int i = 0; i < sampleSize; i++)
  {
    reading += analogRead(axisPin);
  }
  return reading/sampleSize;
}



bool detectChute(float x,float y,float z){
 return abs(x) < 0.3 && abs(y) < 0.3 && abs(z) <0.3; 
}
