Conecta un Joystick

Seguro que todavía tienes por casa un viejo joystick o gamepad de cuando jugabas en tu PC viejo ... de esos que en vez de conector USB tenían un conector serie DB-15. Pues bien ... ya lo puedes desempolvar y conectarlo a tu Arduino para lo que necesites.

Lo primero ... montarse un cable según el siguiente esquema:

Figura 1. Esquema de conexionado

Así es como me ha quedado a mi:

Figuras 2 y 3. Visión del cable finalizado

Y lo puedo utlizar para joystick/gamepad analógicos y digitales de 2 o 4 botones:

Figuras 4 y 5. Gamepad y Joystick conectado a la placa Arduino

Figuras 6. Probándolo con un Joystick analógico de 2 botones

Código fuente

 /* 

 Comprobador de un Gamepad/Joystick para PC con
 un conector DB-15

 Configuración de los pines del puerto de joystick

 (male connector on joystick cable)

        .-----------------------.
        \ 8 7  6  5  4  3  2  1 /
         \ 15 14 13 12 11 10 9 /
           ~~~~~~~~~~~~~~~~~~~

  1  XY1 (+5v)
  2  Switch 1
  3  X1
  4  Ground (for switch 1)
  5  Ground (for switch 2)
  6  Y1
  7  Switch 2
  8  N.C.
  9  XY2 (+5v)
 10  Switch 3
 11  X2
 12  Ground (for switch 3&4) *
 13  Y2
 14  Switch 4
 15  N.C. *

          Joystick B             ____      Joystick A
                                /    |
                              /      |
                            /        |
                          /       1  |
                         |        O------- 5 Volt
              5 Volt -------O        |
                         |  9     2  |
                         |        O------- Button
              Button -------O        |
                         |  10    3  |
                         |        O------- Resistor X-axis
     Resistor X-axis -------O        |
                         |  11    4  |
                         |        O------- Ground
            MIDI TXD -------O        |
                         |  12    5  |
                         |        O------- Ground
     Resistor Y-axis -------O        |
                         |  13    6  |
                         |        O------- Resistor Y-axis
              Button -------O        |
                         |  14    7  |
                         |        O------- Button
            MIDI RXD -------O        |
                         |  15    8  |
                         |        O------- 5 Volt
                          \          |
                            \        |
                              \      |
                                \    |
                                  \__|

  Pin  Joystick Fucntion              Paddle Function       Din6  MIDI

   1   +5.0 VDC                                              L5    -
   2   Joystick A Fire Button 1       Paddle #1 Fire Button  L4    -
   3   Joystick A X Position (Roll)   Paddle #1 Position     L1    -
   4   Ground                                                L3    -

   5   Ground                                                L3   GND
   6   Joystick A Y Postion (Pitch)   Paddle #2 Position     L2    -
   7   Joystick A Fire Button 2       Paddle #2 Fire Button  L6    -
   8   +5.0VDC                                               L3   +5V

   9   +5.0VDC                                               R3    -
  10   Joystick B Fire Button 1       Paddle #3 Fire Button  R4    -
  11   Joystick B X Postion           Paddle #3 Position     R1    -
  12   Ground                                                R3   DOut

  13   Joystick B Y Position          Paddle #4 Postion      R2    -
  14   Joystick B Fire Button 2       Paddle #4 Fire Button  R6    -
  15   +5.0 VDC                                              R5   DIn     

 Igor González Martín. 18-03-2007
 igor.gonzalez.martin@gmail.com

 */

 int joyX = 0;      // Eje X del joystick
 int joyY = 1;      // Eje Y del joystick
 int boton1= 4;     // Botón 1 del joystick
 int boton2= 5;     // Botón 2 del joystick
 int boton3= 6;     // Botón 3 del joystick
 int boton4= 7;     // Botón 4 del joystick
 int valX=0;
 int valY=0;
 int bot1Val=0;
 int bot2Val=0;
 int bot3Val=0;
 int bot4Val=0;

 void setup(){
   Serial.begin(9600);
   pinMode (boton1,INPUT);
   pinMode (boton2,INPUT);
   pinMode (boton3,INPUT);
   pinMode (boton4,INPUT);
 }

 void loop () {
   valX=analogRead(joyX);    
   valY=analogRead(joyY);
   bot1Val=digitalRead(boton1);    
   bot2Val=digitalRead(boton2);    
   bot3Val=digitalRead(boton3);    
   bot4Val=digitalRead(boton4); 
   Serial.println("--------------------------");   
   Serial.print("X: ");
   Serial.print(valX);
   Serial.print(" - Y: ");
   Serial.println(valY);
   Serial.print("Boton1: ");
   Serial.println(bot1Val);    
   Serial.print("Boton2: ");
   Serial.println(bot2Val);    
   Serial.print("Boton3: ");
   Serial.println(bot3Val);    
   Serial.print("Boton4: ");
   Serial.println(bot4Val);      
   delay (1000);
 }

by Igor González Martín 21-03-2007