Saltar al contenido
Contenido de Arduino

Lección 1.4: Joystick analógico

Un joystick de pulgar convierte un gesto en dos números. Sirve para mover un servo, dirigir un robot o navegar por un menú.

Material

Cómo funciona

Cada eje es un potenciómetro: al mover la palanca cambia la tensión de su pin central entre 0 y 5 V. analogRead() la convierte en un número entre 0 y 1023, y en reposo los dos ejes leen cerca de 512.

Ningún joystick vuelve exactamente al centro, así que se define una zona muerta: mientras la lectura esté cerca de 512, se considera reposo.

Al apretar la palanca se cierra un pulsador entre SW y GND. Como en cualquier pulsador, se usa INPUT_PULLUP: suelto lee HIGH y pulsado LOW.

Conexiones

ComponenteSe conecta aNota
Joystick, GNDGND
Joystick, +5V5V
Joystick, VRxA0
Joystick, VRyA1
Joystick, SWPin 2

Código

// Lee el joystick y escribe hacia dónde apunta.
const int X_PIN = A0;
const int Y_PIN = A1;
const int SW_PIN = 2;
const int DEAD_ZONE = 100; // margen alrededor del centro

void setup() {
  pinMode(SW_PIN, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  int x = analogRead(X_PIN);
  int y = analogRead(Y_PIN);
  bool pressed = digitalRead(SW_PIN) == LOW;

  Serial.print("X: ");
  Serial.print(x);
  Serial.print("  Y: ");
  Serial.print(y);
  Serial.print("  ");

  if (x < 512 - DEAD_ZONE) Serial.print("izquierda ");
  if (x > 512 + DEAD_ZONE) Serial.print("derecha ");
  if (y < 512 - DEAD_ZONE) Serial.print("arriba ");
  if (y > 512 + DEAD_ZONE) Serial.print("abajo ");
  if (pressed) Serial.print("[pulsado]");

  Serial.println();
  delay(200);
}

Qué hace el código

  • analogRead() devuelve de 0 a 1023 porque el convertidor analógico del Uno es de 10 bits.
  • DEAD_ZONE evita que el ruido alrededor del centro se lea como movimiento. Ajústalo a tu joystick.
  • Los if no llevan else: en una diagonal se cumplen dos y se imprimen las dos direcciones.

Paso a paso

  1. Conecta el módulo con cinco cables hembra-macho según la tabla.
  2. Sube el código y abre el monitor serie a 9600 baudios.
  3. Mueve la palanca en las cuatro direcciones y apriétala.

Resultado

El monitor serie muestra los valores de X e Y, la dirección en la que apunta la palanca y si está pulsada.

Si no funciona

  • Si las direcciones salen al revés, depende de cómo esté orientado el módulo: cambia los textos de sitio o invierte las comparaciones.
  • Si en reposo aparece una dirección, aumenta DEAD_ZONE.
  • Si el pulsador no responde, aprieta con firmeza: en muchos módulos el clic es duro.