Problema con retro-usb joystick, al cargar se autopulsan todos los botones

Buenas, soy bastante novato y mi intención es hacer una interface con arduino para conectar la mayoría de los mandos de las consolas retro y poder jugar a los emuladores con sus mandos originales, sega master mega saturn Nes Supernes, etc, buscando encontré un proyecto ya hecho de lo que yo quería exactamente, lo cargo en Uno y antes de cambiar el firm del Uno para que comporte como un joystick lo pruebo con una aplicación de UnoJoy UnoJoyProcessingVisualizer.exe y lo que veo es que todos los botones se vuelven locos, y también pasa los mismo al abrir el serial monitor, probé un código más simple de otro usuario , solo para conectar un mando de megadrive y pasa lo mismo. Algo hago mal y creo que es algo muy básico porque hay bastantes códigos y tutoriales para conectar mandos de retros al arduino y a mi ninguno me va.
Si alguien puede echarme una mano se lo agradecería mucho.

Aquí dejo el código del completo y mas abajo uno mas sencillo de solo la consola megadrive.

Edito, subo el pdf completo por si a alguien le interesa.
Universal-Retro Console Gamepads to USB Adapter
with Two-Player Compatibility

UnoJoy.h (10.2 KB)

universalretro_controler.ino (8.38 KB)

universalretro_controler.ino (8.38 KB)

Si los botones estan conectados a entradas digitales,recuerda que hay que poner resistencias de pulldown para evitar que cuando no estan pulsados queden 'al aire'

Gracias por responder, creo que los mandos llevan sus resistencias, en los esquemas u tutoriales no sale que tenga que conectarlas.
este código funciona bien y no pongo las resistencia, bueno bien menos que los pads analógicos se mueven hacia un lado al arrancar.

#include "UnoJoy.h"

void setup(){
setupPins();
setupUnoJoy();
}

void loop(){
// Always be getting fresh data
dataForController_t controllerData = getControllerData();
setControllerData(controllerData);
}

void setupPins(void){
// Set all the digital pins as inputs
// with the pull-up enabled, except for the 
// two serial line pins
for (int i = 2; i <= 12; i++){
  pinMode(i, INPUT);
  digitalWrite(i, HIGH);
}
pinMode(A4, INPUT);
digitalWrite(A4, HIGH);
pinMode(A5, INPUT);
digitalWrite(A5, HIGH);
}

dataForController_t getControllerData(void){

// Set up a place for our controller data
//  Use the getBlankDataForController() function, since
//  just declaring a fresh dataForController_t tends
//  to get you one filled with junk from other, random
//  values that were in those memory locations before
dataForController_t controllerData = getBlankDataForController();
// Since our buttons are all held high and
//  pulled low when pressed, we use the "!"
//  operator to invert the readings from the pins
controllerData.triangleOn = !digitalRead(2);
controllerData.circleOn = !digitalRead(3);
controllerData.squareOn = !digitalRead(4);
controllerData.crossOn = !digitalRead(5);
controllerData.dpadUpOn = !digitalRead(6);
controllerData.dpadDownOn = !digitalRead(7);
controllerData.dpadLeftOn = !digitalRead(8);
controllerData.dpadRightOn = !digitalRead(9);
controllerData.l1On = !digitalRead(10);
controllerData.r1On = !digitalRead(11);
controllerData.selectOn = !digitalRead(12);
controllerData.startOn = !digitalRead(A4);
controllerData.homeOn = !digitalRead(A5);

// Set the analog sticks
//  Since analogRead(pin) returns a 10 bit value,
//  we need to perform a bit shift operation to
//  lose the 2 least significant bits and get an
//  8 bit number that we can use  
controllerData.leftStickX = analogRead(A0) >> 2;
controllerData.leftStickY = analogRead(A1) >> 2;
controllerData.rightStickX = analogRead(A2) >> 2;
controllerData.rightStickY = analogRead(A3) >> 2;
// And return the data!
return controllerData;
}

Por favor para códigos usar tags leer Normas del Foro

punto 7. Insertar códigos

Ahora respondo parcialmente tu consulta.

Trata de ser mas detallista a la hora de explicarlo.
Puntualmente que no funciona o no lo hace como esperas que lo haga?

surbyte:
Por favor para códigos usar tags leer Normas del Foro

punto 7. Insertar códigos

Ahora respondo parcialmente tu consulta.

Trata de ser mas detallista a la hora de explicarlo.
Puntualmente que no funciona o no lo hace como esperas que lo haga?

Gracias!!
cuando cargo el código en el Uno y utilizo la aplicación UnoJoyProcessingVisualizer para confirmar que según el botón que apriete se activa un botón u otro, no pasa esto lo que veo es todos botones apretándose casi a la vez, si la cierro y abro en el serial monitor se ven un montón de datos que envía el Uno, y no tendría que sera así.

Sigo creyendo que es un problema de resistencias pulldown.

jose:
Sigo creyendo que es un problema de resistencias pulldown.

Pues si muchas gracias, acabo de hacer una prueba rápida en el código para megadrive añadiendo esto, "digitalWrite(i, HIGH); //pullup" y funciona Ok, ya no se autopulsan los botones, mañana seguiré para acabarlo, gracias de nuevo!!!!!

Hola, amigo, yo te digo que desde ya a mi por lo menos no me ayudaron en nada con ese tema, SI debo decir que me dijeron que arduino uno no sirve para joystic, y me aconsejaron que adquiera un leonardo, pus asi lo hice, estoy eperando que llege,.... y bueno despues empezare on JOYSTICK Parte 2. saludos

Tiene razón pajarrrito, el UNO no puede usarse como Joystick USB.

Bueno realmente la aplicación no seria para un joystick si no para un "control pad" como los llamo yo, de las consolas sega master system megadrive nes sunpernes, etc...
He conseguido por separado que un mando de las mastersystem funciones, pero el proyecto que puse en el primer post es mas complicado no veo donde puedo poner las resistencias pulldown en el codigo.

El pdf del primer mensaje del post, habla de re-grabar el firmware del atmega 16u2 del arduino uno, para que pueda ser reconocido como un dispositivo usb y poderlo usar como joystick. A mi, personalmente, me parece que es complicarse un poco la vida, teniendo en cuenta que existe el leonardo.

Con respecto a lo de las resistencias pulldown, no se pueden poner en el código. Se tienen que poner de forma física. Sí que podemos poner las pullup así:

pinMode (pin, INPUT_PULLUP);