El módulo joystick es un dispositivo sencillo y práctico que permite captar movimientos en dos ejes (X e Y) y pulsaciones mediante un botón integrado. Cada eje envía una señal analógica que representa la posición del joystick, mientras que el botón actúa como una entrada digital, lo que facilita su lectura con Arduino.
Este módulo es ideal para proyectos como controles remotos, robots, videojuegos o sistemas interactivos. Su diseño compacto y facilidad de uso lo convierten en una excelente opción para agregar control manual a tus proyectos Arduino de forma intuitiva y versátil.
Joystick | Arduino |
---|---|
GND | GND |
+5V | 5V |
VRx | Pin análogo |
VRy | Pin análogo |
SW | Pin digital |
const int pinJoystickX = A0; // Pin analógico para el eje X del joystick
const int pinJoystickY = A1; // Pin analógico para el eje Y del joystick
const int pinJoystickBtn = 5; // Pin digital para el botón del joystick
int valorPrevioX = 0; // Valor previo del eje X
int valorPrevioY = 0; // Valor previo del eje Y
bool botonPrevio = HIGH; // Estado previo del botón (HIGH = no presionado)
const int threshold = 5; // Umbral para detectar movimiento (para reducir ruido)
void setup() {
Serial.begin(9600); // Inicia la comunicación serial
pinMode(pinJoystickBtn, INPUT_PULLUP); // Configura el pin del botón con resistencia interna
}
void loop() {
// Lee los valores actuales de los ejes del joystick y el botón
int valorX = analogRead(pinJoystickX);
int valorY = analogRead(pinJoystickY);
bool boton = digitalRead(pinJoystickBtn);
// Verifica si hay un cambio significativo en el eje X
if (abs(valorX - valorPrevioX) > threshold) {
valorPrevioX = valorX; // Actualiza el valor previo del eje X
Serial.print("Posición X: ");
Serial.println(valorX);
}
// Verifica si hay un cambio significativo en el eje Y
if (abs(valorY - valorPrevioY) > threshold) {
valorPrevioY = valorY; // Actualiza el valor previo del eje Y
Serial.print("Posición Y: ");
Serial.println(valorY);
}
// Verifica si el estado del botón ha cambiado
if (boton != botonPrevio) {
botonPrevio = boton; // Actualiza el estado previo del botón
if (boton == LOW) {
Serial.println("Botón presionado");
} else {
Serial.println("Botón liberado");
}
}
// Pequeño retardo para evitar saturar el monitor serial
delay(15);
}