Adaptador mandos consolas a usb

Buenas retroeolianos. Llevo bastante tiempo desconectado del mundillo pero ahora estoy intentando montarme un pc para emulación de consolas (de la generación 128 bit), y he estado buscando algun adaptador de mandos de gc/dc/ps2/xbox a usb.

La cuestión es que me gustaría tener uno que funcionara con todos los mandos, pero solo he encontrado el magic joy 3 y esta agotado en todas partes.

Alguien me podria recomendar algun otro? O algun proyecto con arduino con el que se pudiera conseguir un adaptador de todos los sistemas a usb?

Gracias de antebraso. 😁
Esta eñl bliss box, pero no es nada barato, ademas del propio precio, vienen las aduanas, pero hace exactamente eso que quieres, yo llevo mucho tiempo igual con el tema mandos, y no encuentro mejor opcion que el bliss box, pero por precio todavía lo tengo ahí, y tiro al final de un mando de xbox para todo lo moderno y un 8btido tipo snes para lo retro
En estos dias, la unica parte que vale la pena de ese adaptador es la de PS2, y eso es bastante cuestionable, porque a estas alturas ya esta bastante anticuado y obsoleto porque solo lo hace a Dinput.

De gamecube en que lo usarias? en Dolphin? Tiene mejor funcionamiento el adaptador de GC a Wii U con su respectivo driver para que funcione.

De Xbox? solo necesita un conector usb A y el driver, y puede tener los botones con presion, (pero no es como que sean usados en PC), la ventaja es que puede hacer un remap a nivel sistema sin problemas. Como no sea que quieras usar el mando original de xbox con los botones negro y blanco en vez de LB y RB, esta el de 360, el de one y el de series que son muy buen sustituto.

PS2, no conosco ningun adaptador que soporte botones con presion, solo L2 y R2, y eso solo los que sean adaptadores a Xinput. El magic joy 3 como dije, solo es a Dinput.
Bueno, la idea era tener algo "todo en uno" que ya se me comen los cables, me gustaría usar los de PS2, Dreamcast, Gamecube, Xbox... basicamente de esa generación. Pero al final tiraré por usar mandos modernos por lo que veo.

Gracias por las sugerencias de todas maneras :)
Buenas.

Desde hace muchos años tengo un proyecto de poder "leer" los mandos de consolas retro para usar en pc y también lo contrario, usar un arduino o similar para poder manejar las consolas.

En su día conseguí estos sistemas;
-Mega Drive

-ps2

-saturn

Son los únicos mandos que tenía.

Supongo que mandos como el de DC tienen que ser jodidillos.

Si en vez de usar un arduino uno, usas un Leonardo o micro pro (32u4) podrías convertir las pulsaciones del mando en pulsaciones de Gamepad de pc.
Eso mismo hice yo con un arduino leonardo y un mando de ps2. Creo que perdí el codigo que hice hace tiempo, pero voy a ver... si lo encuentro lo pongo aqui. Si no respondo es que esta 100% perdido.

Editado:
Encontre lo que hice hace años. Como no tengo ni puta idea de programacion lo que hice fue modificar un scketch de arduino de un proyecto que requeria poner el leonardo en dfu y flashearlo. Pero como mi version de leonardo es chinorris de dealextreme no quería hacerlo así, asique usé el codigo que usa para leer las pulsaciones y las reconducí para usar la libreria joystick.h .

No estoy seguro de que sea esta la versión que hice funcionar pero ahi está:
#include <Joystick.h>
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
  16, 0,                  // Button Count, Hat Switch Count
  true, true, false,     // X and Y, but no Z Axis
  true, true, false,   // No Rx, Ry, or Rz
  false, false,          // No rudder or throttle
  false, false, false);  // No accelerator, brake, or steering

#include "UnoJoy.h"
#include "PS2X_lib.h"

#define PS2_DAT 11 //14
#define PS2_CMD 9 //15
#define PS2_SEL 8 //16
#define PS2_CLK 10 //17

//#define pressures true
#define pressures false
//#define rumble true
#define rumble false

PS2X ps2x;

int error = 0;
byte type = 0;
byte vibrate = 0;

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

// Initialize Joystick Library
  Joystick.begin();
  Joystick.setXAxisRange(0, 255);
  Joystick.setYAxisRange(0,255);
  Joystick.setRxAxisRange(0,255);
  Joystick.setRyAxisRange(0,255);
}

void loop(){
// Always be getting fresh data
dataForController_t controllerData = getControllerData();
setControllerData(controllerData);
error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);

if (controllerData.triangleOn) {Joystick.setButton(0,1);} else {Joystick.setButton(0,0);}
if (controllerData.circleOn) {Joystick.setButton(1,1);} else {Joystick.setButton(1,0);}
if (controllerData.squareOn) {Joystick.setButton(2,1);} else {Joystick.setButton(2,0);}
if (controllerData.crossOn) {Joystick.setButton(3,1);} else {Joystick.setButton(3,0);}
if (controllerData.dpadUpOn) {Joystick.setButton(4,1);} else {Joystick.setButton(4,0);}
if (controllerData.dpadDownOn) {Joystick.setButton(5,1);} else {Joystick.setButton(5,0);}
if (controllerData.dpadLeftOn ) {Joystick.setButton(6,1);} else {Joystick.setButton(6,0);}
if (controllerData.dpadRightOn) {Joystick.setButton(7,1);} else {Joystick.setButton(7,0);}
if (controllerData.l1On) {Joystick.setButton(8,1);} else {Joystick.setButton(8,0);}
if (controllerData.r1On) {Joystick.setButton(9,1);} else {Joystick.setButton(9,0);}
//if (controllerData.selectOn) {Joystick.setButton(10,1);} else {Joystick.setButton(10,0);}
if (controllerData.startOn) {Joystick.setButton(11,1);} else {Joystick.setButton(11,0);}
if (controllerData.l2On) {Joystick.setButton(12,1);} else {Joystick.setButton(12,0);}
if (controllerData.l3On) {Joystick.setButton(13,1);} else {Joystick.setButton(13,0);}
if (controllerData.r2On) {Joystick.setButton(14,1);} else {Joystick.setButton(14,0);}
if (controllerData.r3On) {Joystick.setButton(15,1);} else {Joystick.setButton(15,0);}
Joystick.setXAxis(controllerData.leftStickX);
Joystick.setYAxis(controllerData.leftStickY);
Joystick.setRxAxis(controllerData.rightStickX);
Joystick.setRyAxis(controllerData.rightStickY);


}

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
ps2x.read_gamepad(false, vibrate);
controllerData.triangleOn = ps2x.Button(PSB_TRIANGLE);
controllerData.circleOn = ps2x.Button(PSB_CIRCLE);
controllerData.squareOn = ps2x.Button(PSB_SQUARE);
controllerData.crossOn = ps2x.Button(PSB_CROSS);
controllerData.dpadUpOn = ps2x.Button(PSB_PAD_UP);
controllerData.dpadDownOn = ps2x.Button(PSB_PAD_DOWN);
controllerData.dpadLeftOn = ps2x.Button(PSB_PAD_LEFT);
controllerData.dpadRightOn = ps2x.Button(PSB_PAD_RIGHT);
controllerData.l1On = ps2x.Button(PSB_L1);
controllerData.r1On = ps2x.Button(PSB_R1);
controllerData.selectOn = ps2x.Button(PSB_SELECT);
controllerData.startOn = ps2x.Button(PSB_START);
controllerData.l2On = ps2x.Button(PSB_L2);
controllerData.l3On = ps2x.Button(PSB_L3);
controllerData.r2On = ps2x.Button(PSB_R2);
controllerData.r3On = ps2x.Button(PSB_R3);

// 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 = ps2x.Analog(PSS_LX), DEC;
controllerData.leftStickY = ps2x.Analog(PSS_LY), DEC;
controllerData.rightStickX = ps2x.Analog(PSS_RX), DEC;
controllerData.rightStickY = ps2x.Analog(PSS_RY), DEC;
// And return the data!

return controllerData;
 
     

}


Asegurarse de tener instalada en el IDE las librerias de los #include.

#define PS2_DAT 11 //14
#define PS2_CMD 9 //15
#define PS2_SEL 8 //16
#define PS2_CLK 10 //17
estos son los pines usados.
Busca los esquemas de conexion en google.
Si no recuerdo mal el PS2_SEL equivale al ATT de los esquemas de conexion del controlador de ps2.
5 respuestas