Código y vídeo de Arduino: Joystick de doble eje
En este tutorial, exploraremos cómo utilizar un joystick XY de doble eje con Arduino. Este joystick puede emplearse como controlador de juegos o para controlar brazos robóticos, entre otras aplicaciones. El enfoque principal será detectar la posición del joystick y el estado de su botón pulsador, que pueden reflejarse en un monitor serie.

A lo largo del tutorial implementaremos un programa sencillo que lee las posiciones X y Y del joystick y las muestra en el Monitor serie de Arduino. Cuando se pulsa el joystick, también se detectará el estado del interruptor. Para una explicación detallada del código, asegúrate de ver el video en las marcas de tiempo especificadas (en el video en 00:00).
Hardware explicado
Los componentes principales de este proyecto incluyen el módulo de joystick de doble eje y la placa Arduino. El módulo de joystick consta de dos resistencias variables, una para el eje X y otra para el eje Y, que proporcionan valores analógicos según la posición del joystick. El interruptor pulsador del joystick se utiliza para detectar cuándo se pulsa.
Cuando mueves el joystick, los potenciómetros cambian su resistencia, lo que se traduce en valores entre 0 y 1023. Esto nos permite determinar con precisión la posición del joystick. El pulsador está conectado a un pin de entrada digital del Arduino, lo que nos permite leer su estado sin necesitar una resistencia externa, empleando la resistencia pull-up interna.
Detalles de la ficha técnica
| Fabricante | Genérico |
|---|---|
| Número de pieza | Módulo de joystick de dos ejes |
| Tensión lógica/E/S | 5 V |
| Tensión de alimentación | 5 V |
| Rango de tensión de salida | 0 - 5 V |
| Resolución | Analógico de 10 bits (0-1023) |
| Tipo de interruptor | Botón pulsador |
| Paquete | Módulo estándar |
- Asegúrese de que el módulo del joystick reciba una alimentación adecuada (5 V).
- Conecte las salidas X y Y del joystick a los pines analógicos A0 y A1, respectivamente.
- Use el pin digital 6 para el interruptor del joystick.
- Utilice una configuración con resistencia pull-up para el pin del interruptor.
- Controle los valores de salida para asegurarse de que estén en el rango de 0 a 1023.
Instrucciones de cableado


Para conectar el joystick de doble eje al Arduino, comience conectando el pin de tierra del joystick al riel de tierra de su placa de pruebas. A continuación, conecte el pin de 5V del joystick al riel positivo de la placa de pruebas. Los dos pines variables del joystick, etiquetados como X y Y, deben conectarse a los pines analógicosA0yA1en el Arduino, respectivamente.
Para el interruptor pulsador del joystick, conéctalo al pin digital6En el Arduino. Esta conexión utiliza la resistencia pull-up interna, por lo que no necesitas una resistencia externa. Finalmente, si quieres monitorizar el estado del interruptor con un LED, conecta la pata más larga del LED al pin digital13y la pata más corta a través de una resistencia de 680 ohmios a tierra.
Ejemplos de código y guía paso a paso
En el código de Arduino, definimos el pin del interruptor y especificamos las dimensiones de la pantalla para mapear los valores del joystick. La función setup inicializa la comunicación serie y configura el modo del pin del interruptor.
void setup() {
Serial.begin(9600); // initialize serial communication
pinMode(sw, INPUT_PULLUP); // setting pin sw as input
pinMode(13, OUTPUT); // LED pin
}En la función loop, leemos los valores analógicos de las posiciones X e Y y los mapeamos a las dimensiones de pantalla definidas. El estado del interruptor también se lee y se imprime en el Monitor serial.
void loop() {
int x = analogRead(A0); // read analog value for X
int y = analogRead(A1); // read analog value for Y
int sStat = digitalRead(sw); // read switch state
// Print values to Serial Monitor
Serial.print("X: ");
Serial.print(xPos);
Serial.print(" Y: ");
Serial.println(yPos);
}Finalmente, el código comprueba si el interruptor está pulsado, encendiendo o apagando el LED según el estado del interruptor. Esto proporciona retroalimentación visual cuando se activa el botón del joystick.
if(sStat == LOW) {
Serial.println("Switch pressed");
digitalWrite(13, HIGH); // Turn LED ON
} else {
digitalWrite(13, LOW); // Turn LED OFF
}Para ver cómo cambian los valores del joystick en tiempo real, sube el código a tu Arduino y abre el Monitor Serial. Los valores se actualizarán cada medio segundo, mostrando las posiciones actuales en X e Y junto con el estado del interruptor (en el video a las 01:30).
Demostración / Qué esperar
Cuando muevas el joystick, los valores X e Y deberían cambiar en consecuencia, oscilando entre 0 y 1023. Si presionas el botón del joystick, el LED conectado al pin 13 se encenderá, indicando que el interruptor está activo. Si el joystick está centrado, deberías ver valores alrededor de 512 para ambos ejes, dependiendo de la calibración del joystick.
Marcas de tiempo del vídeo
- 00:00- Introducción al joystick de dos ejes
- 01:30- Explicación del código y funcionalidad
- 02:45- Instrucciones de cableado
- 03:15- Salida esperada y pruebas
/*
* This is Arduino code to use a dual-axis XY joystick to read the value of the joystick position as X and Y, and
* also read the switch.
* Other Arduino library and videos: https://robojax.com
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/6N8Iq353GM8
* This code is offered "as is" without any warranty.
* If you are sharing this code, you must keep this copyright note.
*/
/*
* Written for Robojax video on January 10, 2018
* by Ahmad Nejrabi, in Ajax, Ontario, Canada
* Copyright Robojax Inc.
*/
/*
* This is a dual-axis joystick sketch for Arduino.
* The position of the joystick is read and displayed on the serial monitor.
*/
#define sw 6
#define screenWidth 600
#define screenHeight 300
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
pinMode(sw,INPUT_PULLUP);// setting pin sw as input
pinMode(13,OUTPUT);
}
void loop() {
// Robojax Dual Axis joystick project
int x = analogRead(A0);// read analog value
int y = analogRead(A1);
int xPos = map(x, 0, 1023,0,screenWidth);
int yPos = map(y, 0, 1023,0,screenHeight);
int sStat = digitalRead(sw);//
// Robojax project
Serial.print("X: ");
Serial.print(xPos);
Serial.print(" Y: ");
Serial.println(yPos);// Robojax prints y value
if(sStat ==LOW){
Serial.println("Switch pressed");
digitalWrite(13,HIGH);// Turn LED ON
}else{
digitalWrite(13,LOW);// Turn LED OFF
}
delay(500);
}
Cosas que podrías necesitar
-
AmazonasCompra el Joystick XY de Amazonamzn.to
Recursos y referencias
Aún no hay recursos.
Archivos📁
No hay archivos disponibles.