// Demo for getting individual unified sensor data from the MPU6050
#include <Adafruit_MPU6050.h>
#include <SPI.h>
#include <SD.h>

Adafruit_MPU6050 mpu;
Adafruit_Sensor *mpu_temp, *mpu_accel, *mpu_gyro;

File myFile;

void setup(void) {
  Serial.begin(115200);
  while (!Serial) {
    delay(10); // will pause Zero, etc until serial console opens
  }

  Serial.println("Initializing SD card...\n");
  if (!SD.begin(5)) {
    Serial.println("SD card missing!");
    while (1);
  }

  Serial.println("Adafruit MPU6050 test!");
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }

  Serial.println("MPU6050 Found!");
  mpu_temp = mpu.getTemperatureSensor();
  mpu_temp->printSensorDetails();

  mpu_accel = mpu.getAccelerometerSensor();
  mpu_accel->printSensorDetails();

  mpu_gyro = mpu.getGyroSensor();
  mpu_gyro->printSensorDetails();
}

void MPU_data() {
  /* Get a new normalized sensor event */
  sensors_event_t accel;
  sensors_event_t gyro;
  sensors_event_t temp;
  mpu_temp->getEvent(&temp);
  mpu_accel->getEvent(&accel);
  mpu_gyro->getEvent(&gyro);

  Serial.print("\t\tTemperature ");
  Serial.print(temp.temperature);
  Serial.println(" deg C");

  /* Display the results (acceleration is measured in m/s^2) */
  Serial.print("\t\tAccel X: ");
  Serial.print(accel.acceleration.x);
  Serial.print(" \tY: ");
  Serial.print(accel.acceleration.y);
  Serial.print(" \tZ: ");
  Serial.print(accel.acceleration.z);
  Serial.println(" m/s^2 ");

  /* Display the results (rotation is measured in rad/s) */
  Serial.print("\t\tGyro X: ");
  Serial.print(gyro.gyro.x);
  Serial.print(" \tY: ");
  Serial.print(gyro.gyro.y);
  Serial.print(" \tZ: ");
  Serial.print(gyro.gyro.z);
  Serial.println(" radians/s ");
  Serial.println();

  //Data Logging to SD Card
  if (SD.exists("Data.csv"))        //file name is Data.csv
  {
    myFile = SD.open("Data.csv", FILE_WRITE);

    myFile.print(temp.temperature); myFile.print(", ");
    myFile.print(accel.acceleration.x); myFile.print(", ");
    myFile.print(accel.acceleration.y); myFile.print(", ");
    myFile.print(accel.acceleration.z); myFile.print(", ");
    myFile.print(gyro.gyro.x); myFile.print(", ");
    myFile.print(gyro.gyro.y); myFile.print(", ");
    myFile.print(gyro.gyro.z); myFile.print(", ");
    myFile.println();
    myFile.close();
    Serial.println("\n1st data write to sd card-------------------------------------");
  }
  else
  {
    myFile = SD.open("Data.csv", FILE_WRITE);
    myFile.println("Temperature (C), Accel X, Accel Y, Accel Z, Gyro X, Gyro Y, Gyro Z");
    myFile.println("__________________________________________________________________");
    myFile.print(temp.temperature); myFile.print(", ");
    myFile.print(accel.acceleration.x); myFile.print(", ");
    myFile.print(accel.acceleration.y); myFile.print(", ");
    myFile.print(accel.acceleration.z); myFile.print(", ");
    myFile.print(gyro.gyro.x); myFile.print(", ");
    myFile.print(gyro.gyro.y); myFile.print(", ");
    myFile.print(gyro.gyro.z); myFile.print(", ");
    myFile.println();
    myFile.close();
    Serial.println("\nWrite to sd card------------------------------------------------");
  }
}

void loop() {
  MPU_data();
  delay(1000);
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
imu1:INT
imu1:AD0
imu1:XCL
imu1:XDA
imu1:SDA
imu1:SCL
imu1:GND
imu1:VCC
sd1:CD
sd1:DO
sd1:GND
sd1:SCK
sd1:VCC
sd1:DI
sd1:CS
servo1:GND
servo1:V+
servo1:PWM
bz1:1
bz1:2
led1:A
led1:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r