Joystick, no ha pasao tanto desde que te conocí
Aloha casters del mundo! En este mundo pandémico veo gamers, casters, twitchers y youtubers proliferando como la espuma. Cada uno tiene su hueco y su espacio. (Oye, ¿Debería hacerme yo algo de eso? Deja tu opinión en comentarios que te leo 😛)
Y con todo esto me ha venido a la mente cuando era pequeño y jugábamos con joysticks a los juegos MAME en un ordenador que ahora consideraríamos una tortuga. O Cuando jugaba a la PlayStation (Sí sí, la 1) y empezaba a mover a los jugadores con el joystick DualShock.
Justo esos joystick DualShock son exactamente iguales a los que podemos encontrar para Arduino.
P.D. Se viene post facilón para los más novatos del lugar.
La señas básicas del joystick
Bueno, creo que poco hay que explicar de los joystick. Se trata de un elemento que se puede mover en los ejes x e y (vertical y horizontal) permitiendo giros de hasta 360º.
Cuando nos llega el joystick a casa nos encontramos con una pieza un poco extraña que dispone de un palo que sale de manera vertical hacia nosotros.
Justo en ese palo es donde hay que posicionar una pieza plástica circular. Es esta la que nos permite deslizar mejor el dedo y que es exactamente igual al de los joystick DualShock de los que hablábamos al inicio.
Una vez instalado el plástico podremos girar el joystick e incluso pulsarlo. Si presionamos hacia el interior notaremos un click. Esto es porque dispone de un botón, que ya utilizábamos en los juegos de la PS1 😉
Pinout, el rey fuera y dentro de casa
En cuanto al pinout que encontramos en el componente podemos ver:
- GND: Se conecta al GND de nuestro Arduino.
- +5V: Se conecta al pin 5V de Arduino para alimentar el componente.
- VRx: Envía un voltaje entre 0 y 5 Voltios según el valor de la posición horizontal del joystick. Esto es un valor analógico ya que puede variar en muchas posiciones, por lo que lo conectaremos a un pin analógico como es el A0.
- VRy: Como el anterior, pero ahora el voltaje depende de la posición vertical (y). Lo conectaremos a otro pin analógico, como puede ser A1.
- SW: Es el pin que nos indica que el botón (Switch) ha sido pulsado. Esta indicación es algo binario: o está pulsado o no. Es por esto que lo conectamos a un pin digital como puede ser el 9.
Tal y como puedes ver, el desplazamiento del joystick viene marcado por dos componentes, la x y la y, que marcan el punto en el eje horizontal y el punto en el eje vertical. Es decir, la x marca si está más a la derecha o a la izquierda y la y si está más arriba o más abajo.
Con esas dos componentes conocemos la posición exacta y podemos utilizarlo para mover un personaje en una pantalla 2D. Luego si queremos que salten, en los juegos siempre le ponen un botón del mando.
Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
No te vale solo con el hardware
¡Programemos esta vaina pues! Para no complicarme lo que voy a hacer es sacar por pantalla el valor de x e y:
int x=0; int y=0; void setup(){ Serial.begin(9600); } void loop(){ x=analogRead(0); delay(100); y=analogRead(1); Serial.print("x: " ); Serial.print(x); Serial.print(" - y: "); Serial.println(y); delay(1000); }
Como ves, solamente leo el valor analógico de ambos pines. El detalle es que hago una pequeña espera al leer x e y por si acaso Arduino necesita un tiempo para gestionar la primera medida. Por parte del componente no pasa nada porque él establece el valor del voltaje indistintamente de si yo lo leo o no.
Si quisiéramos ver si el botón está pulsado solamente habría que hacer una lectura digital en el pin 9, que es el que hemos elegido para conectar el botón:
int sw = digitalRead(9);
Joystick, se ha enterado todo el mundo de que no eres tan ingobernable…
Algunas ideas de qué puedes hacer con esto, pues sería interesante unos leds que se encienden si son apuntados. Es decir, si el valor de x e y está en este rango es que estoy apuntando hacia el led 1 que se encuentra a la derecha del joystick, por lo que enciendo ese led. Luego si muevo el led hacia la izquierda se encenderá ese led izquierdo, que tendrá otro rango de valores x e y.
Hablo de rango de valores porque estamos ante una medida analógica, no va a ser siempre un valor exacto sino que depende de cómo lo movamos van haber cambios de tensiones aunque para nuestros ojos esté posicionado hacia arriba o hacia la izquierda.
Otra actividad un poco más avanzada podría ser mover un servomotor según se mueva el joystick. Para ello tendrás que recuperar eso de las hipotenusas y los catetos para poder calcular senos y cosenos y obtener los grados a mover. Con la librería math de Arduino seguro que lo consigues 😉
Sino, siempre puedes coger un Arduino, S4A y a los más peques de la casa y mover un pequeño dibujo animado por la pantalla. Pero cuidado no te marees con tanto vaivén en la pantalla 😉
Te dejo esta canción con mis buenas intenciones…