まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - Candy-cab

Fil des billets - Fil des commentaires

samedi, 22 novembre 2025

Joystick Arcade pour Nintendo GameCube

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);
  
}

mercredi, 3 février 2021

Une Borne d'Arcade maison, nouveau marquee

Suite de l'étude précédente :

J'en parlais à l'époque, je n'ai jamais été satisfait du « marquee », pour la simple et bonne raison que je l'ai raté, et ce sans compter que je ne savais pas comment procéder pour les grilles de haut-parleur.
Je ne sais pas comment j'ai pu faire cette grossière erreur dans le découpage du verre synthétique, peut-être influencé par la disposition des haut-parleurs dans la borne, j'aurais voulu projeter leurs encombrements sur la face… Bref, l'artwork retrouve ses obliques découpées, mais jugez plutôt via ces deux clichés…

  • Donc mon ancien artwork, et un nouveau retravaillé et plus conforme à son modèle original !

20200919_151251.jpg 20200918_193602.jpg
Bref, fatigué de tout le travail accompli, j'avais décidé de laisser tomber… Jusqu'à ce que je retrouve la motivation pour m'y remettre. C'est donc maintenant !

  • De fait, le verre synthétique n'est plus bon, j'en ai alors découpé un nouveau et me suis mis en quête de grille de haut-parleur.

20200918_163226.jpg 20200918_163230.jpg

Lire la suite...

mardi, 29 septembre 2020

Mini Game Center -9-

Suite de l'étude précédente :

Une histoire de marquee :

Une fois la maquette sous-couchée de gris, on commence à imaginer la phase de peinture, on se projette sur ce que sera l'objet final.
Et le rendu de celui-ci va dépendre beaucoup des petits détails qui vont rendre la borne réaliste, et malheureusement ces détails sont proposés sous forme de stickers.
Bien qu'un autocolant bien découpé puisse faire l'affaire, ce n'est pas satisfaisant pour moi, d'autant plus que certaines représentations sur la planche fournie dans la boite ne sont pas de la bonne couleur. ( certaines couleurs des panels notamment ).
J'ai alors commencé à regarder comment fabriquer mes propres décals à l'eau, et durant cette réflexion me suis rapidement aperçu, évidence, que le marquee du bas était en plastique noir !
Alors que celui du haut est sur fond blanc, ce qui pourrait permettre un rétro-éclairage afin de l'illuminer, celui du bas, en noir donc rend impossible ce genre d'effet. Et vu le mal qu'on s'est donné avec l'écran et tout, autant aller jusqu'au bout des choses non ?
Il me faudrait donc envisager de rendre cette pièce noire, sinon transparente, au moins translucide…


Essais de lumière :

20200604_215307.jpg

  • En premiers, je teste le rétro-éclairage avec des led CMS 1206 ( désigne la taille du boitier des leds), et comme un blanc chaud et un blanc froid étaient disponibles, j'ai décidé de prendre les deux, histoire de comparer…
  • Découpage d'une vieille plaque électronique afin d'utiliser les pastilles comme point d'ancrage pour souder les leds, et câblage de tout ceci avec du fil émaillé. Je n'ai pas mis de résistances de protection, car pour les tests je vais utiliser une vieille pile CR2032 qui fournit juste le voltage nécessaire.

20200605_193108.jpg 20200605_203957.jpg dsc04580.jpg dsc04576.jpg

  • J'ai voulu éclairer le marquee du haut, en y appliquant le bandeau de led ainsi bricolé, mais force est de constater que ça éclaire de manière trop ponctuelle, et ce malgré l'ajout de quelques couches de papier calque pour tenter de diffuser la lumière.

dsc04577.jpg dsc04578.jpg

  • Puis j'ai eu l'idée d'éclairer indirectement le marquee du bas en espérant que le plastique blanc diffuse suffisamment bien la lumière :

dsc04586.jpg dsc04582.jpg dsc04584.jpg dsc04585.jpg

  • Bon ! Là on est pas mal, et c'est finalement le blanc froid qui l'emporte, plus proche du néon qu'utilise une Astro City !

Lire la suite...

mardi, 11 août 2020

Mini Game Center -8-

Suite de l'étude précédente :

Maintenant que tout est en place côté électronique, on va pouvoir repasser en mode maquette, et s'occuper de la préparation avant peinture.


Modifications :

  • Avant de coller les deux côtés de la borne au dos, je découpe la croix centrale afin de lui retirer une branche.

dsc04526.jpg dsc04528.jpg dsc04530.jpg

On pourrait se passer de cette pièce prévue pour stabiliser l'assemblage d'une maquette réalisée sans peinture ni colle, comme l'a prévu Wave à la base ( je prend pour preuve la disponibilité de stickers à la place de décals ), mais on va l'utiliser ici comme support au Raspberry.


  • Et la tu comprends tout de suite pourquoi j'ai modélisé3D le support de l'écran avec un trou béant… Pour pouvoir y glisser le µOrdinateur.

dsc04531.jpg dsc04532.jpg

Lire la suite...

- page 1 de 13