Joystick

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.

Pinout:

Joystick Arduino
GND GND
+5V 5V
VRx Pin análogo
VRy Pin análogo
SW Pin digital

Código de ejemplo


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);
}