Funcionamiento
Implementar un circuito que permita controlar el brillo de 4 LEDs mediante un joystick KY-023 conectado a una placa Arduino. El brillo de cada LED variará en función de la dirección en la que se mueva el joystick. Adicionalmente, un quinto LED se encenderá al presionar el botón del joystick.
Componentes
- 1 Placa Arduino (UNO, Mega, o similar).
- 1 Módulo joystick KY-023.
- 5 LEDs (cualquier color).
- 5 Resistencias (220 ohms).
- Cables de conexión.
- Protoboard.
Conexiones
- Conecta los pines del joystick:
- VCC a 5V de Arduino.
- GND a GND de Arduino.
- VRx a A0 (para eje X).
- VRy a A1 (para eje Y).
- SW a pin digital 2 (para el botón).
- Conecta cada LED con su resistencia de 220 ohms a los pines PWM:
- LED 1: Pin digital 6.
- LED 2: Pin digital 5.
- LED 3: Pin digital 4.
- LED 4: Pin digital 3.
- LED 5 (botón): Pin digital 7.
Código
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <Arduino.h> // Pines del joystick const int VRx = A0; const int VRy = A1; const int SW = 2; // Pines de LEDs const int LED_UP = 3; const int LED_DOWN = 4; const int LED_LEFT = 5; const int LED_RIGHT = 6; const int LED_PRESS = 7; void setup() { // Configuración de pines pinMode(SW, INPUT_PULLUP); // Botón del joystick pinMode(LED_UP, OUTPUT); pinMode(LED_DOWN, OUTPUT); pinMode(LED_LEFT, OUTPUT); pinMode(LED_RIGHT, OUTPUT); pinMode(LED_PRESS, OUTPUT); Serial.begin(9600); // Para depuración opcional } void loop() { // Leer valores analógicos del joystick int x = analogRead(VRx); // Eje X int y = analogRead(VRy); // Eje Y int swState = digitalRead(SW); // Botón Serial.print("x: "); Serial.print(x); Serial.print(" y: "); Serial.println(y); // Mapear valores de 0-1023 a 0-255 para intensidad PWM int brightnessUp = map(y, 512, 1023, 0, 255); int brightnessDown = map(y, 512, 0, 0, 255); int brightnessLeft = map(x, 512, 0, 0, 255); int brightnessRight = map(x, 512, 1023, 0, 255); // Controlar LEDs según dirección analogWrite(LED_UP, (y > 512) ? brightnessUp : 0); analogWrite(LED_DOWN, (y < 512) ? brightnessDown : 0); analogWrite(LED_LEFT, (x < 512) ? brightnessLeft : 0); analogWrite(LED_RIGHT, (x > 512) ? brightnessRight : 0); // Encender LED si se presiona el botón if (swState == LOW) { digitalWrite(LED_PRESS, HIGH); } else { digitalWrite(LED_PRESS, LOW); } // Pequeño retraso para mayor estabilidad delay(50); } |
Notas:
- Los valores de mapeo y sensibilidad pueden ajustarse según tu joystick.
- Asegúrate de que las conexiones sean sólidas para evitar errores.
Diseños

Videos