Joystick [solucionado]

Raios. Ya lo resolvi. Pero imagino se queda el post como ejemplo jaja.

El problema era que tenia 2 sketches abiertos, virtualmente identicos. En la ultima iteracion, solo hubo una diferencia (clave jaja)

pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);

Uno la tenia, el otro no. Y por distraido, trabajaba en el la version que si la tenia, pero subia al arduino la version que no, derp. Ya funciona, solo es cuestion de terminar de armar mi arcade XD. Gracias a todos de cualquier forma.

Hola a todos. Realmente no queria pedir ayuda, pero la programacion, si bien la medio entiendo, aun no es lo mio.

Hice un cajon para un joystick con 8 botones y la palanca de 4 direcciones (12 botones en total). Tengo 2 arduinos leonardo.
Baje las librerias para el joystick, y en el ejemplo de codigo, de hecho creo es suficiente.
Este es el codigo de ejemplo

// The digital pins 2 - 6 are grounded when they are pressed.
// Pin 2 = UP
// Pin 3 = RIGHT
// Pin 4 = DOWN
// Pin 5 = LEFT
// Pin 6 = FIRE
//
// NOTE: This sketch file is for use with Arduino Leonardo and
//       Arduino Micro only.
//
// by Matthew Heironimus
// 2016-11-24
//--------------------------------------------------------------------

#include <Joystick.h>

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
  1, 0,                  // Button Count, Hat Switch Count
  true, true, false,     // X and Y, but no Z Axis
  false, false, false,   // No Rx, Ry, or Rz
  false, false,          // No rudder or throttle
  false, false, false);  // No accelerator, brake, or steering

void setup() {
  // Initialize Button Pins
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);

  // Initialize Joystick Library
  Joystick.begin();
  Joystick.setXAxisRange(-1, 1);
  Joystick.setYAxisRange(-1, 1);
}

// Last state of the buttons
int lastButtonState[5] = {0,0,0,0,0};

void loop() {

  // Read pin values
  for (int index = 0; index < 5; index++)
  {
    int currentButtonState = !digitalRead(index + 2);
    if (currentButtonState != lastButtonState[index])
    {
      switch (index) {
        case 0: // UP
          if (currentButtonState == 1) {
            Joystick.setYAxis(-1);
          } else {
            Joystick.setYAxis(0);
          }
          break;
        case 1: // RIGHT
          if (currentButtonState == 1) {
            Joystick.setXAxis(1);
          } else {
            Joystick.setXAxis(0);
          }
          break;
        case 2: // DOWN
          if (currentButtonState == 1) {
            Joystick.setYAxis(1);
          } else {
            Joystick.setYAxis(0);
          }
          break;
        case 3: // LEFT
          if (currentButtonState == 1) {
            Joystick.setXAxis(-1);
          } else {
            Joystick.setXAxis(0);
          }
          break;
        case 4: // FIRE
          Joystick.setButton(0, currentButtonState);
          break;
      }
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(10);
}

Yo bien truchilla, me di cuenta de algunas cosas, asi que modifique y agregue lo siguiente.

X, 0,                  // Button Count, Hat Switch Count

<- la x determina la cantidad de botones, puse 8, la palanca ya estaba configurada.

pinMode(6, INPUT_PULLUP);

<-- Segui agregando hasta el 13. Por que empieza en 2.

// Last state of the buttons
int lastButtonState["x"] = {0,0,0,0,0};

<---- x= cantidad de botones, y tiene que haber la misma cantidad de 0's en el arreglo, o sea x=12 y 12 ceros en el arreglo.

for (int index = 0; index < 5; index++). El 5 son la cantidad de botones,ahora es 12.

case 4: // FIRE
          Joystick.setButton(0, currentButtonState);
          break;

Este es el unico boton que no es palanca, asi que si quiero mas botones, pues repito estas 3 lineas, modificando case +1, ademas modificando esta parte

Joystick.setButton(X, currentButtonState); donde x aumenta en 1 en el siguiente boton.

El codigo lo agrego al final. El problema es este. Las 4 direcciones funcionan perfecto (pin 2,3,4,5). Cuando agrego botones, los primeros 6 funcionan perfecto (pin 6,7,8,9,10,11).

El problema es el pin 12 y 13. Si agrego el pin 12 a la ecuacion, esta apagado por defecto, pero en cuanto presiono cualquier boton, el pin 12 empieza a oscilar. Si lo dejo presionado se queda prendido (esto en el panel de control/configuracion de joysticks conectados). Y si lo suelto, regresa a la oscilacion.

Cabe destacar, si bien, el armatoste ya esta armado, la fase de prueba la estoy haciendo solo con la palanca (4 botones compartiendo el ground, solo estoy cambiando los pins a otro socket para verificar otros botones)

Si agrego el pin 12 y 13, el 12 se conporta como lo acabo de describir, pero empieza oscilando ya. pero el 13 esta prendido siempre. No puedo determinar si me acepta el input, pero definitivamente nunca regresa a normal. El pin 12 probablemente empieza oscilando sin yo presionar nada por que detecta el 13 ya activado.

Supuse que el arduino estaba dañado, puesto que no lo he usado en un tiempo, pero tengo 2, y los 2 fallan donde mismo (de hecho son 3, pero solo usare 2, ya que son 2 joysticks en 1, tipo arcade). o sea, la falla soy yo (la historia de mi vida jaja). Supongo que es algo menor, ya que esos 2 ultimos botones en efecto son añadidos con el codigo, simplemente no hacen lo que se supone que deben de hacer.

Muchas gracias de antemano. Ahi va mi codigo completo.

// Simple gamepad example that demonstraits how to read five Arduino
// digital pins and map them to the Arduino Joystick library.
//
// The digital pins 2 - 6 are grounded when they are pressed.
// Pin 2 = UP
// Pin 3 = RIGHT
// Pin 4 = DOWN
// Pin 5 = LEFT
// Pin 6 = FIRE
//
// NOTE: This sketch file is for use with Arduino Leonardo and
//       Arduino Micro only.
//
// by Matthew Heironimus
// 2016-11-24
//--------------------------------------------------------------------

#include <Joystick.h>

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
  8, 0,                  // Button Count, Hat Switch Count
  true, true, false,     // X and Y, but no Z Axis
  false, false, false,   // No Rx, Ry, or Rz
  false, false,          // No rudder or throttle
  false, false, false);  // No accelerator, brake, or steering

void setup() {
  // Initialize Button Pins
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);

  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(13, INPUT_PULLUP);

  
  // Initialize Joystick Library
  Joystick.begin();
  Joystick.setXAxisRange(-1, 1);
  Joystick.setYAxisRange(-1, 1);
}


// Last state of the buttons
int lastButtonState[12] = {0,0,0,0,0,0,0,0,0,0,0,0};

void loop() {

  // Read pin values
  for (int index = 0; index < 12; index++)
  {
    int currentButtonState = !digitalRead(index + 2);
    if (currentButtonState != lastButtonState[index])
    {
      switch (index) {
        case 0: // UP
          if (currentButtonState == 1) {
            Joystick.setYAxis(-1);
          } else {
            Joystick.setYAxis(0);
          }
          break;
        case 1: // RIGHT
          if (currentButtonState == 1) {
            Joystick.setXAxis(1);
          } else {
            Joystick.setXAxis(0);
          }
          break;
        case 2: // DOWN
          if (currentButtonState == 1) {
            Joystick.setYAxis(1);
          } else {
            Joystick.setYAxis(0);
          }
          break;
        case 3: // LEFT
          if (currentButtonState == 1) {
            Joystick.setXAxis(-1);
          } else {
            Joystick.setXAxis(0);
          }
          break;
          case 4: // A
          Joystick.setButton(0, currentButtonState);
          break;

          case 5: // B
        Joystick.setButton(1, currentButtonState);
      break;

    case 6: // C
         Joystick.setButton(2, currentButtonState);
         break;

        case 7: // X
         Joystick.setButton(3, currentButtonState);
         break;

          case 8: // Y
          Joystick.setButton(4, currentButtonState);
          break;

          case 9: // Z
          Joystick.setButton(5, currentButtonState);
          break;

          case 10: // Start
          Joystick.setButton(6, currentButtonState);
          break;

          case 11: // Coin
          Joystick.setButton(7, currentButtonState);
          break;

       
      }
      lastButtonState[index] = currentButtonState;
    }
  delay(10);
}    
  }

**Moderador:**Hola, bienvenido al foro Arduino.
En la sección proyectos tienes estos dos hilos que debiste haber leído antes de postear

Como tu consulta es para otra sección lo muevo a Software.
Edita título: Retira la palabra ayuda, solo un título que refleje tu consulta o su contenido.
Edita el código, usando etiquetas aunque sea una sola línea va con etiquetas.

Normas del foro

surbyte:
Como tu consulta es para otra sección lo muevo a Software.
Edita título: Retira la palabra ayuda, solo un título que refleje tu consulta o su contenido.
Edita el código, usando etiquetas aunque sea una sola línea va con etiquetas.

Sorry, listo. Gracias.

Te felicito por editarlo y por resolverlo.

Gracias.

Si consideras terminado el tema edita una vez mas y ponle [SOLUCIONADO] al terminar tu título.