Código de búsqueda

Código y vídeo de Arduino: Joystick de doble eje

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.

XY-Dual access joystick

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

FabricanteGenérico
Número de piezaMódulo de joystick de dos ejes
Tensión lógica/E/S5 V
Tensión de alimentación5 V
Rango de tensión de salida0 - 5 V
ResoluciónAnalógico de 10 bits (0-1023)
Tipo de interruptorBotón pulsador
PaqueteMó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

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring

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

Imágenes

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring
58-This is the Arduino code for a dual-axis joystick.
Idioma: C++
/*
 * 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

Recursos y referencias

Aún no hay recursos.

Archivos📁

No hay archivos disponibles.