#include <ESP32Servo.h>

// Definimos los pines a los que se conectan los servos
int servo1_pin = 2;
int servo2_pin = 4;
int servo3_pin = 5;

// Definimos los objetos de Servo
Servo servo1;
Servo servo2;
Servo servo3;

// Definimos los pines a los que se conectan los joysticks
int joy1_x_pin = 34;
int joy1_y_pin = 35;
int joy1_button_pin = 32;
int joy2_x_pin = 27;
int joy2_y_pin = 33;
int joy2_button_pin = 12;

// Definimos el pin a utilizar para la LED
int led_pin = 13;

// Variable para almacenar el estado de la LED
bool led_state = false;

// Definimos la función para controlar la LED
void toggleLed() {
  if (led_state) {
    digitalWrite(led_pin, LOW);
    led_state = false;
  } else {
    digitalWrite(led_pin, HIGH);
    led_state = true;
  }
}

void setup() {
  // Inicializamos los objetos de Servo
  servo1.attach(servo1_pin);
  servo2.attach(servo2_pin);
  servo3.attach(servo3_pin);

  // Configuramos los pines de los joysticks como entradas
  pinMode(joy1_x_pin, INPUT);
  pinMode(joy1_y_pin, INPUT);
  pinMode(joy1_button_pin, INPUT_PULLUP);
  pinMode(joy2_x_pin, INPUT);
  pinMode(joy2_y_pin, INPUT);
  pinMode(joy2_button_pin, INPUT_PULLUP);

  // Configuramos el pin de la LED como salida
  pinMode(led_pin, OUTPUT);
}

void loop() {
  // Leemos los valores de los joysticks
  int joy1_x = analogRead(joy1_x_pin);
  int joy1_y = analogRead(joy1_y_pin);
  int joy2_x = analogRead(joy2_x_pin);
  int joy2_y = analogRead(joy2_y_pin);

  // Mapeamos los valores de los joysticks a los ángulos de los servos
  int servo1_angle = map(joy1_x, 0, 4095, 0, 180);
  int servo2_angle = map(joy1_y, 0, 4095, 0, 180);
  int servo3_angle = map(joy2_x, 0, 4095, 0, 180);

  // Movemos los servos a los ángulos correspondientes
  servo1.write(servo1_angle);
  servo2.write(servo2_angle);
  servo3.write(servo3_angle);

  // Verificamos si se ha pulsado el botón del joystick 1
  if (digitalRead(joy1_button_pin) == LOW) {
    // Se ha pulsado el botón, así que cambiamos el estado de la LED
    toggleLed();
    // Esperamos un tiempo para evitar rebotes del botón
    delay(50);
  }
}
NOCOMNCVCCGNDINLED1PWRRelay Module