Author Options:

Trying to do a project for a class using the Arduino Uno, a Genesis controller, and a Wii Nunchuck? Answered

Trying to do a project for a class using the Arduino Uno, a Genesis controller, and a Wii Nunchuck. Full info can be found here: http://arduino.cc/forum/index.php/topic,60245.0.html

Unfortunately my lack of coding skills have proven to act as a pretty massive roadblock in getting any further. Any help would be greatly appreciated.

Right now my main concern is just getting the Genesis controller to work with the Arduino, if I can just get that far I can probably figure out the rest by myself (and there are other classmates working on Wii nunchuck projects as well that I'm working with so once we've got their projects figured out I can probably apply simular, if not the same, solution to my project.)


The forums are retiring in 2021 and are now closed for new topics and comments.

9 years ago

Websearch for "genesis controller circuit" finds a number of relevant items, including a fairly complete description of its behavior at


and some schematics for adapting the Genesis to other game systems.

Given that, you should be able to hook its outputs to a set of digital input pins on the Uno. Then it's a matter of checking the status of those bits each time you go around the loop, and responding appropriately.


Answer 9 years ago

Thanks for the help, the article was definitely a big help.

There still is the issue in regards to getting the coding right (Needless to say I am NOT a programming major of ANY kind, and I've never been any good at it despite repeated attempts to learn) but at least from this point forward most problems should be on a software end.

One thing I'm not to sure on though is were Pin 7, the select signal, should be connected. Right now my assumption would be either the AREF or GND along the Digital Row on the Arduino.


Answer 9 years ago

Select signal is an output from the genesis to the controller that basically tells the controller "I'm polling group a or group b"

It goes to any digital output on the arduino.

Pin Connection
--- ---------------
5 Power: +5 Volts arduino +5v
7 Select signal digital pin configured output, pick your favourite
8 Power: Ground ground

This table lists connections which are outputs from the controller to
the Genesis and are dependent on the logic level to the select signal,
again the first column is the pin of number the DB-9:

Pin Connection with select low Connection with select high
--- -------------------------- ---------------------------
1 joypad up signal joypad up signal
2 joypad down signal joypad down signal
3 logic low (ground) joypad left signal
4 logic low (ground) joypad right signal
6 Button A signal Button B signal
9 Start button signal Button C signal

hook pins 1 2 3 4 6 9 to unique digital pins (input) on the arduino.

make 'select' low, then read the values of 1 2 3 4 6 9 and store in variables. Make select high, and repeat that read to a different set of variables. (its now reading the other values from the same pins). Note how up and down are duplicated, also we can ignore reading logic low.


declare the variables 'booletc' below as global variables so the whole program can see them.

void ReadGenesisButtons() { //Call this frequently in your main program loop or it will miss button presses. You may need 'debounce' code.
Selectpin = low;
boolUpPad = digitalread(pin1); //replace pin1 with whatever you named pin1
boolDownPad = digitalread(pin2);
boolAbutton = digitalread(pin6);
boolStartButton = digitalread(pin9);
Selectpin = high;
delay(1); //slight delay may be necessary, probably not
boolLeftPad = digitalread(pin3);
boolRightPad = digitalread(pin4);
boolBbutton = digitalread(pin6);
boolCbutton = digitalread(pin9);


Answer 9 years ago

*just check to make sure you don't need a 6 button controller, same thing, just slightly different.