Arduino UNO R4 - Joystick

En esta guía, aprenderemos a usar un joystick con Arduino UNO R4. Cubriremos:

Arduino UNO R4 y joystick

Acerca de Joystick

Es posible que hayas visto un joystick utilizado como mando de videojuegos, un mando de juguete, o incluso en máquinas grandes como los controladores de excavadoras.

El joystick tiene dos potenciómetros dispuestos en una formación cuadrada y un pulsador. Proporciona las siguientes salidas:

  • Un valor analógico (de 0 a 1023) para la posición horizontal (coordenada X)
  • Un valor analógico (de 0 a 1023) para la posición vertical (coordenada Y)
  • Un estado digital de un botón (HIGH o LOW)

Cuando combinas dos valores analógicos, forman coordenadas 2D. Estas coordenadas están centradas cuando el joystick no se está moviendo. Puedes averiguar fácilmente la dirección real de estas coordenadas ejecutando un código de prueba, lo que veremos en la próxima sección.

Algunas aplicaciones podrían usar las tres salidas, mientras que otras podrían usar solo algunas de ellas.

Disposición de pines

Un joystick tiene cinco pines.

  • Pin GND: conéctalo a GND (0V)
  • Pin VCC: conéctalo a VCC (5V)
  • Pin VRX: proporciona un valor analógico para la posición horizontal (coordenada X).
  • Pin VRY: proporciona un valor analógico para la posición vertical (coordenada Y).
  • Pin SW: proviene del pulsador del joystick. Por lo general está abierto. Usar una resistencia de pull-up hace que este pin esté en ALTO cuando no está presionado y BAJO cuando está presionado.
Pinout del joystick

Cómo funciona

  • Movimiento Izquierda/Derecha
    • Cuando mueves el joystick hacia la izquierda o hacia la derecha, cambia la señal eléctrica (voltaje) en el pin VRX.
    • Al moverlo a la izquierda, el voltaje cae a 0 voltios.
    • Al moverlo a la derecha, el voltaje aumenta a 5 voltios.
    • El Arduino lee este voltaje y lo convierte en un número entre 0 y 1023. Así, 0 V corresponde a 0 y 5 V a 1023.
  • Movimiento Arriba/Abajo:
    • Del mismo modo, mover el joystick hacia arriba o hacia abajo cambia el voltaje en el pin VRY.
    • Al subir, el voltaje se reduce a 0 voltios.
    • Al bajar, el voltaje aumenta a 5 voltios.
    • El Arduino también lee este voltaje, convirtiéndolo en un número entre 0 y 1023, igual que con el pin VRX.
  • Movimientos combinados:
    • Cuando mueves el joystick en cualquier dirección (no solo izquierda/derecha o arriba/abajo), cambia el voltaje en los pines VRX y VRY según su posición en cada eje.
  • Presionar el Joystick:
    • Cuando empujas el joystick hacia abajo (como pulsando un botón), activa un botón interno dentro del joystick.
    • Si conectas una resistencia pull-up al pin SW, el voltaje en este pin cambiará de 5 V a 0 V cuando se pulse.
    • El Arduino lee este cambio como una señal digital, mostrando ALTO (5 V) cuando no está presionado y BAJO (0 V) cuando está presionado.

    En resumen, al mover el joystick cambian los voltajes en VRX y VRY, que el Arduino lee como números entre 0 y 1023. Al presionar el joystick cambia el voltaje en el pin SW, que el Arduino lee como HIGH o LOW.

Diagrama de Cableado

Diagrama de cableado del joystick para Arduino UNO R4

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Uno R4 y otros componentes.

Cómo programar para un joystick

El joystick consta de dos componentes: una parte analógica (ejes X e Y) y una parte digital (un pulsador).

  • Para leer los valores de los ejes X y Y, simplemente use la función analogRead() en el pin de entrada analógica.
int xValue = analogRead(A1); int yValue = analogRead(A0);
  • Para la parte digital, que es un pulsador: es simplemente un botón. Un método fácil y eficaz es usar la biblioteca ezButton. Esta biblioteca ayuda a gestionar la estabilidad del botón y también activa un sistema interno para mantener estable el botón. Puedes aprender más en el tutorial de Arduino UNO R4 - Botón. Te mostraremos cómo usar el código en la siguiente parte de este tutorial.

Después de obtener las lecturas de los pines analógicos, podríamos necesitar convertirlas a valores manejables. La sección siguiente proporcionará ejemplos de código para ello.

Código de Arduino UNO R4

Aquí están los códigos de ejemplo para Arduino UNO R4:

  • Ejemplo de código: obtiene valores analógicos del joystick
  • Ejemplo de código: obtiene valores analógicos y verifica el estado de los botones del joystick
  • Ejemplo de código: convierte el valor analógico en comandos: MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
  • Ejemplo de código: convierte valores analógicos en ángulos para controlar dos servomotores (como en una cámara pan-tilt)

Lee valores analógicos del joystick

/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.println(yValue); delay(200); }

Pasos R\u00e1pidos

Siga estas instrucciones paso a paso:

  • Si es la primera vez que usa el Arduino Uno R4 WiFi/Minima, consulte el tutorial sobre la configuración del entorno para Arduino Uno R4 WiFi/Minima en el IDE de Arduino (configuración del entorno para Arduino Uno R4 WiFi/Minima en el IDE de Arduino).
  • Conecte el joystick al Arduino UNO R4 según el diagrama proporcionado.
  • Conecte la placa Arduino Uno R4 a su ordenador utilizando un cable USB.
  • Inicie el IDE de Arduino en su ordenador.
  • Seleccione la placa adecuada de Arduino Uno R4 (p. ej., Arduino Uno R4 WiFi) y el puerto COM.
  • Copie el código anterior y ábralo en el IDE de Arduino.
  • Haga clic en el botón Subir en el IDE de Arduino para cargar el código en su Arduino UNO R4.
  • Empuje la palanca del joystick hasta el borde y luego gírela en un círculo (ya sea en sentido horario o antihorario).
  • Verifique los resultados en el Monitor Serial.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Al girar el joystick, mantén un ojo en el Monitor Serial. Si el valor de X muestra 0, recuerda esta posición como izquierda; lo opuesto es derecha. Si el valor de Y es 0, toma esta posición como arriba; lo opuesto es abajo.

Lee valores analógicos y lee el estado del botón de un joystick

/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #include <ezButton.h> #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define SW_PIN 2 // The Arduino UNO R4 pin connected to SW pin ezButton button(SW_PIN); int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis int bValue = 0; // To store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.print(yValue); Serial.print(" : button = "); Serial.println(bValue); }

Pasos R\u00e1pidos

  • Ve al icono de Bibliotecas en el lado izquierdo del IDE de Arduino.
  • Busca “ezButton” y localiza la biblioteca de botones de ArduinoGetStarted.com
  • Haz clic en el botón Instalar para añadir la biblioteca ezButton.
Biblioteca de botones para Arduino UNO R4
  • Copia el código y ábrelo en el IDE de Arduino.
  • Haz clic en el botón Cargar en el IDE de Arduino para cargar el código al Arduino UNO R4.
  • Mueve el pulgar del joystick a la izquierda, a la derecha, hacia arriba o hacia abajo.
  • Presiona hacia abajo en la parte superior del joystick.
  • Ver los resultados en el Monitor de serie.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Convierte el valor analógico en comandos de MOVER IZQUIERDA/DERECHA/ARRIBA/ABAJO

/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int xValue = 0 ; // To store value of the X axis int yValue = 0 ; // To store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (xValue < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (xValue > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (yValue < UP_THRESHOLD) command = command | COMMAND_UP; else if (yValue > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

Pasos R\u00e1pidos

  • Copia el código anterior y ábrelo con el IDE de Arduino.
  • Haz clic en el botón Subir en el IDE de Arduino para cargar el código en Arduino UNO R4.
  • Mueve el pulgar del joystick hacia la izquierda, derecha, arriba, abajo o en cualquier otra dirección.
  • Verifica los resultados en el Monitor Serial.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Nota:

A veces, puede no haber ninguna orden, una orden o dos órdenes al mismo tiempo (por ejemplo, ARRIBA y IZQUIERDA juntos).

Convierte valores analógicos en ángulos para controlar dos servomotores

Puede encontrar información sobre el tutorial Arduino UNO R4 - Controles de Joystick para servomotor.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Referencias de funciones

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!