#include <Adafruit_Sensor.h>
#include <Adafruit_MPU6050.h>
#include <ESP32Servo.h>

// Inicializar el objeto del giroscopio
Adafruit_MPU6050 mpu;

// Inicializar el objeto del servo
Servo miServo;

void setup() {
  Serial.begin(115200);

  // Inicializar el giroscopio
  if (!mpu.begin()) {
    Serial.println("Giroscopio no encontrado. Conecta correctamente o revisa la dirección I2C.");
    while (1);
  }

  // Inicializar el servo en el pin D5 de la ESP32
  miServo.attach(5);
}

void loop() {
  // Leer los valores del giroscopio
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  // Obtener la aceleración en el eje x
  float aceleracionX = a.acceleration.x;

  // Obtener la velocidad angular en el eje x
  float velocidadAngularX = g.gyro.x;

  // Mapear la aceleración a la escala del servo (ajusta según sea necesario)
  int anguloServo = map(aceleracionX, -9.8, 9.8, 0, 180);

  // Limitar los valores del servo
  anguloServo = constrain(anguloServo, 0, 180);

  // Mover el servo al ángulo calculado
  miServo.write(anguloServo);

  // Imprimir valores para depuración
  Serial.print("Aceleración X: ");
  Serial.print(aceleracionX);
  Serial.print(" | Ángulo Servo: ");
  Serial.println(anguloServo);

  delay(500);  // Ajusta el retardo según sea necesario
}