La borne est en travaux !
En plus du PC « mame » je souhaite lui installer deux autres systèmes de jeux, dont l'un est la console GameCube.
Motivation ? Jouer à Ikaruga et SoulCalibur sur la borne avec les sticks arcade.
Sauf que ! Comment faire pour connecter ces derniers à la console ?
Avant de réinventer la roue, j'ai traîné sur le web à la recherche d'une proposition de circuit électronique.
J'ai eu un peu de mal à trouver ce que je cherchai, visiblement ça n'intéresse pas trop les foules… L'occasion de constater au passage que la manette GameCube n'était pas aussi électroniquement simple que ses aînées, et qu'il faudrait un circuit programmable pour faire le travail.
J'ai fini par trouver cette page, qui décrit comment construire un contrôleur maison, avec un Arduino, et surtout l’existence de la bibliothèque logicielle adéquate : https://github.com/NicoHood/Nintendo (que je joins en annexe à ce billet)
- Le code C++ est vraiment très simple à adapter grâce aux exemples donnés, et j'ai alors pu assigner les numéros de broches d'un Arduino Pro Mini 5V aux boutons d'une manette GameCube et établir le schéma de câblage suivant :

Une fois un câble de manette de remplacement acheté, restait alors le plus long à faire, câbler les broches sur le joystick.
- Ici le brochage est réalisé à l'aide de connecteurs « maisons », qui permettront d'interchanger le joystick entre plusieurs systèmes de jeu (USB ou GameCube pour le moment).
- Le brochage du câble de la manette est le suivant :
Couleur − Usage Jaune − 5V Blanc − GND Vert − GND Noir − GND Bleu − 3,3V Rouge − DATA
- Voici le Scketch à inscrire sur l'Arduino, en ayant pris soins de charger la librairie de NicoHood :
https://github.com/makotoworkshop/Joystick_Arcade_GameCube
#include <Nintendo.h>
// Variables
#define Bouton_A A1
#define Bouton_B 9
#define Bouton_X A2
#define Bouton_Y 3
#define Bouton_START A3
#define Bouton_L 7
#define Bouton_R 8
#define Bouton_Z 2
#define Direction_UP 6
#define Direction_DOWN 5
#define Direction_LEFT A0
#define Direction_RIGHT 4
// Broche de communication vers la console GameCube
CGamecubeConsole gc_console(10);
// Structure de données de la manette
Gamecube_Data_t gc_data = defaultGamecubeData;
void setup() {
// Serial.begin(115200);
// Configuration des boutons en entrée avec résistance pull-up
pinMode(Bouton_A, INPUT_PULLUP);
pinMode(Bouton_B, INPUT_PULLUP);
pinMode(Bouton_X, INPUT_PULLUP);
pinMode(Bouton_Y, INPUT_PULLUP);
pinMode(Bouton_START, INPUT_PULLUP);
pinMode(Bouton_L, INPUT_PULLUP);
pinMode(Bouton_R, INPUT_PULLUP);
pinMode(Bouton_Z, INPUT_PULLUP);
pinMode(Direction_UP, INPUT_PULLUP);
pinMode(Direction_DOWN, INPUT_PULLUP);
pinMode(Direction_LEFT, INPUT_PULLUP);
pinMode(Direction_RIGHT, INPUT_PULLUP);
delay(100);
}
void loop() {
// Lecture des boutons
gc_data.report.a = !digitalRead(Bouton_A);
gc_data.report.b = !digitalRead(Bouton_B);
gc_data.report.x = !digitalRead(Bouton_X);
gc_data.report.y = !digitalRead(Bouton_Y);
gc_data.report.start = !digitalRead(Bouton_START);
gc_data.report.z = !digitalRead(Bouton_Z);
gc_data.report.l = !digitalRead(Bouton_L);
gc_data.report.r = !digitalRead(Bouton_R);
gc_data.report.dup = !digitalRead(Direction_UP);
gc_data.report.ddown = !digitalRead(Direction_DOWN);
gc_data.report.dleft = !digitalRead(Direction_LEFT);
gc_data.report.dright = !digitalRead(Direction_RIGHT);
// Stick analogique centré
gc_data.report.xAxis = 128;
gc_data.report.yAxis = 128;
// Stick C centré
gc_data.report.cxAxis = 128;
gc_data.report.cyAxis = 128;
// Gâchettes analogiques à 0
gc_data.report.left = 0;
gc_data.report.right = 0;
// Envoi du rapport à la console de jeux
gc_console.write(gc_data);
// Serial.print("bouton Y = ");
// Serial.println(gc_data.report.y);
}




























