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
| Componente | Se conecta a | Nota |
|---|---|---|
| Joystick, GND | GND | |
| Joystick, +5V | 5V | |
| Joystick, VRx | A0 | |
| Joystick, VRy | A1 | |
| Joystick, SW | Pin 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
- Conecta el módulo con cinco cables hembra-macho según la tabla.
- Sube el código y abre el monitor serie a 9600 baudios.
- 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.