// Pines del joystick y LEDs
const int JOYSTICK_X_PIN = 34; // Entrada analógica del joystick (Eje X)
const int LED_LEFT_PIN = 25; // LED izquierdo
const int LED_MIDDLE_PIN = 26; // LED central
const int LED_RIGHT_PIN = 27; // LED derecho
// Rango de entrada del ESP32 (ADC de 12 bits)
const int ADC_MIN = 0;
const int ADC_MAX = 4095;
// Rango de salida PWM (0-255)
const int PWM_MIN = 0;
const int PWM_MAX = 255;
// Variables para suavizar transiciones
float smoothLeft = 0;
float smoothMiddle = 0;
float smoothRight = 0;
const float smoothFactor = 0.1; // Cuanto más bajo, más suave la transición
// Función para suavizar transiciones usando un filtro exponencial
float smoothTransition(float currentValue, float targetValue) {
return currentValue + smoothFactor * (targetValue - currentValue);
}
void setup() {
pinMode(LED_LEFT_PIN, OUTPUT);
pinMode(LED_MIDDLE_PIN, OUTPUT);
pinMode(LED_RIGHT_PIN, OUTPUT);
}
void loop() {
// Leer la posición del joystick en el eje X
int joyX = analogRead(JOYSTICK_X_PIN);
// Convertir el valor del joystick a un rango de -1.0 (izquierda) a 1.0 (derecha)
float position = map(joyX, ADC_MIN, ADC_MAX, -100, 100) / 100.0;
// Determinar los valores objetivo para los LEDs según la posición del joystick
int targetLeft = map(position * 100, -100, 100, PWM_MAX, PWM_MIN); // Izquierda fuerte
int targetMiddle = map(abs(position * 100), 0, 100, PWM_MIN + 100, PWM_MAX); // Medio fuerte en centro
int targetRight = map(position * 100, -100, 100, PWM_MIN, PWM_MAX); // Derecha fuerte
// Aplicar los valores correctos según las posiciones requeridas
if (position < -0.5) { // Joystick a la izquierda
targetLeft = PWM_MAX; // 100%
targetMiddle = PWM_MAX * 0.3; // 40%
targetRight = PWM_MAX * 0.1; // 10%
}
else if (position > 0.5) { // Joystick a la derecha
targetLeft = PWM_MAX * 0.1; // 10%
targetMiddle = PWM_MAX * 0.3; // 40%
targetRight = PWM_MAX; // 100%
}
else { // Joystick en el centro
targetLeft = PWM_MAX * 0.3; // 40%
targetMiddle = PWM_MAX; // 100%
targetRight = PWM_MAX * 0.3; // 40%
}
// Suavizar la transición de los LEDs
smoothLeft = smoothTransition(smoothLeft, targetLeft);
smoothMiddle = smoothTransition(smoothMiddle, targetMiddle);
smoothRight = smoothTransition(smoothRight, targetRight);
// Aplicar valores PWM a los LEDs
analogWrite(LED_LEFT_PIN, (int)smoothLeft);
analogWrite(LED_MIDDLE_PIN, (int)smoothMiddle);
analogWrite(LED_RIGHT_PIN, (int)smoothRight);
// Pequeño retraso para estabilidad
delay(10);
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
joystick1:VCC
joystick1:VERT
joystick1:HORZ
joystick1:SEL
joystick1:GND
r1:1
r1:2
led1:A
led1:C
r2:1
r2:2
led2:A
led2:C
r3:1
r3:2
led3:A
led3:C