Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.
Acerca del sensor del joystick
Probablemente veas el joystick en algún lugar, como un mando de videojuegos, un mando de juguete o incluso una gran máquina real, como el controlador de una excavadora.
El joystick está compuesto por dos potenciómetros entre sí y un pulsador. Por lo tanto, proporciona las siguientes salidas:
Un valor analógico (de 0 a 1023) correspondiente a la posición horizontal (denominada coordenada X)
Un valor analógico (de 0 a 1023) correspondiente a la posición vertical (denominada coordenada Y)
Un valor digital de un pulsador (HIGH o LOW)
La combinación de dos valores analógicos puede crear coordenadas 2-D con los valores centrales cuando el joystick está en la posición de reposo. La dirección real de las coordenadas se puede identificar fácilmente cuando ejecutes un código de prueba (en la siguiente parte).
Algunas aplicaciones pueden usar las tres salidas; algunas aplicaciones pueden usar algunas de las tres salidas.
Diagrama de pines
Un joystick tiene 5 pines:
Pin GND: debe conectarse a GND (0 V)
Pin VCC: debe conectarse a VCC (5 V)
Pin VRX: proporciona un valor analógico correspondiente a la posición horizontal (llamada coordenada X).
Pin VRY: proporciona un valor analógico correspondiente a la posición vertical (llamada coordenada Y).
Pin SW: es la salida del pulsador dentro del joystick. Por defecto está abierto. Si usamos una resistencia pull-up en este pin, el pin SW estará en HIGH cuando no esté presionado y en LOW cuando esté presionado.
Cómo funciona
Cuando empujas el pulsador del joystick hacia la izquierda/derecha, el voltaje en el pin VRX cambia. El rango de voltaje es de 0 a 5 V (0 a la izquierda y 5 V a la derecha). El valor de voltaje es proporcional a la posición del pulsador, por lo que el valor de lectura en el pin analógico del Arduino va de 0 a 1023
Cuando empujas el pulsador del joystick hacia arriba/abajo, el voltaje en el pin VRY cambia. El rango de voltaje va de 0 a 5 V (0 arriba y 5 V abajo). El valor de voltaje es proporcional a la posición del pulsador, por lo que el valor de lectura en el pin analógico del Arduino va de 0 a 1023
Cuando empujas el pulsador del joystick en cualquier dirección, el voltaje en los pines VRX y VRY cambia en proporción a la proyección de la posición en cada eje
Cuando empujas el pulsador del joystick de arriba hacia abajo, se cierra el pulsador interno del joystick. Si usamos una resistencia pull-up en el pin SW, la salida del pin SW cambiará de 5 V a 0 V, por lo que la lectura en el pin digital del Arduino cambia de HIGH a LOW
Diagrama de Cableado
This image is created using Fritzing. Click to enlarge image
Cómo programar para un joystick
El joystick tiene dos partes: analógicas (ejes X e Y) y digitales (botón pulsador).
Para las partes analógicas (ejes X, Y), solo necesitas leer el valor del pin de entrada analógica usando la función analogRead().
int xValue = analogRead(A1);int yValue = analogRead(A0);
Para la parte digital (pulsador): es un botón. La forma más simple y conveniente es usar ezButton library. Esta biblioteca admite anti-rebote para botones y también habilita una resistencia interna de pull-up. Puedes ver más sobre el botón en Arduino - Button tutorial. El código se presentará en la próxima sesión de este tutorial.
Después de leer los valores de los pines analógicos, puede que necesitemos convertirlos a valores controlables. La siguiente parte proporcionará los códigos de ejemplo para ello.
Código de Arduino
Esta sección proporcionará los siguientes códigos de ejemplo de Arduino:
Ejemplo de código: lee valores analógicos del joystick
Ejemplo de código: lee valores analógicos y lee el estado del botón desde el 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 (p. ej., en una cámara pan-tilt)
Lee valores analógicos del joystick
/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-joystick*/#define VRX_PIN A1 // Arduino pin connected to VRX pin#define VRY_PIN A0 // Arduino pin connected to VRY pinint xValue = 0; // To store value of the X axisint yValue = 0; // To store value of the Y axisvoidsetup() {Serial.begin(9600) ;}voidloop() {// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// print data to Serial Monitor on Arduino IDESerial.print("x = ");Serial.print(xValue);Serial.print(", y = ");Serial.println(yValue);delay(200);}
Pasos R\u00e1pidos
Copia el código anterior y ábrelo con Arduino IDE
Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino
Empuja el pulsador del joystick al máximo hasta el tope y luego gíralo en un círculo (sentido horario o antihorario)
Mira el resultado en el Monitor Serial
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
Mientras giras el pulgar del joystick, continúa mirando el Monitor Serie
Si el valor X es 0, marca o memoriza la posición actual como izquierda ⇒ la dirección opuesta es la derecha
Si el valor Y es 0, marca o memoriza la posición actual como arriba ⇒ la dirección opuesta es abajo
Lee valores analógicos y lee el estado del botón de un joystick
/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-joystick*/#include <ezButton.h>#define VRX_PIN A1 // Arduino pin connected to VRX pin#define VRY_PIN A0 // Arduino pin connected to VRY pin#define SW_PIN 2 // Arduino pin connected to SW pinezButtonbutton(SW_PIN);int xValue = 0; // To store value of the X axisint yValue = 0; // To store value of the Y axisint bValue = 0; // To store value of the buttonvoidsetup() {Serial.begin(9600) ;button.setDebounceTime(50); // set debounce time to 50 milliseconds}voidloop() {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 IDESerial.print("x = ");Serial.print(xValue);Serial.print(", y = ");Serial.print(yValue);Serial.print(" : button = ");Serial.println(bValue);}
Pasos R\u00e1pidos
Navega al ícono de Bibliotecas en la barra izquierda del IDE de Arduino.
Busca “ezButton”, luego encuentra la librería de botones de ArduinoGetStarted.com
Haz clic en el botón Instalar para instalar la librería ezButton.
Copia el código anterior y ábrelo con el IDE de Arduino
Haz clic en el botón Subir del IDE de Arduino para subir el código al Arduino
Empuja el pulgar del joystick hacia la izquierda/derecha/arriba/abajo
Empuja el pulgar del joystick desde la parte superior
Ve el resultado en el Monitor Serial.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
Convierte el valor analógico en comandos MOVER IZQUIERDA/DERECHA/ARRIBA/ABAJO
/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-joystick*/#define VRX_PIN A1 // Arduino pin connected to VRX pin#define VRY_PIN A0 // Arduino 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 0x08int xValue = 0 ; // To store value of the X axisint yValue = 0 ; // To store value of the Y axisintcommand = COMMAND_NO;voidsetup() {Serial.begin(9600) ;}voidloop() {// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// converts the analog value to commands// reset commandscommand = COMMAND_NO;// check left/right commandsif (xValue < LEFT_THRESHOLD)command = command | COMMAND_LEFT;elseif (xValue > RIGHT_THRESHOLD)command = command | COMMAND_RIGHT;// check up/down commandsif (yValue < UP_THRESHOLD)command = command | COMMAND_UP;elseif (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 commandif (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 del IDE de Arduino para cargar el código en Arduino
Empuja el joystick hacia la izquierda/derecha/arriba/abajo o en cualquier dirección
Mira el resultado en el monitor serie
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
※ Nota:
En un momento dado, puede no haber ningún comando, un comando o dos comandos (p. ej., ARRIBA y IZQUIERDA al mismo tiempo)
Convierte valores analógicos en ángulos para controlar dos servomotores
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.
La demostración en video a continuación utiliza el siguiente código. Ten en cuenta que el video muestra el Arduino Uno R4, pero funciona de manera idéntica para el Arduino Uno R3:
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!