How to read 4uS per bit - Arduino UNO - Gamecube Controller

What i want to do: Read Serial information from a gamecube controller and use it on PC games (And anything Else)
E.G. Google Code Archive - Long-term storage for Google Code Project Hosting.
GitHub - brownan/Gamecube-N64-Controller: Connect a Gamecube controller to a Nintendo 64 using only an Arduino and a single resistor

The Problem: How can i time my arduino code so that it can read the serial information?
How do i then read that information?

Extra Information:
Nintendo Gamecube Controller Pinout Halfway down this page is timing and protocol information

GitHub - brownan/Gamecube-N64-Controller: Connect a Gamecube controller to a Nintendo 64 using only an Arduino and a single resistor This is code for an arduino Due, which sadly dosen't work for Uno

I think i should be fine with everything else i need to do to get this to work, its just the reading of the serial i need help with

Can you use
byte dataStream[12]; // 12 bytes


and then

if (Serial.available()>11){ // read 12 bytes
dataStream[0] =;
dataStream[1] =;
dataStream[2] =;
dataStream[3] =;
dataStream[4] =;
dataStream[5] =;
dataStream[6] =;
dataStream[7] =;
dataStream[8] =;
dataStream[9] =;
dataStream[10] =;
dataStream[11] =;

Sadly, I don't think this is possible for an Uno. The timing requirements are just too strict. The only thing I can possibly think of that might have a fighting chance is the input capture unit, but it might take too much processing in between bits to be feasible.

Have you considered using the Wii Classic Controller instead? All the Wii Remote's peripherals are I2C interface, which is much easier to do for an Uno. I've controlled a Nunchuck successfully with my Arduino, a Classic Controller shouldn't be much harder.

Actually, scratch my entire last post, did you even read the github link you posted? That code was written for a Duemilanove, it absolutely should work on an Uno, possibly with some modifications.

I read that back when i was completely new to arduino. I read somewhere on another site that it would be a complete rewrite to get it to work on a Uno. I did try to get it to work back then but it spat out confusing errors.

i'll try what you said, try to fix said errors.

Also there are large amounts of assembly(?) code. Will that need to be changed for Uno?

also, i just learnt I2C not long ago, shame i dont have a Wii :frowning:

Duemilanove & Uno both use same Atmega328P processor. Only change is the USB/Serial interface to the PC, which you are not using as you would use the D0/D1 for serial to the controller.
See Table 20-7 of the '328P datasheet, 250000 is workable with 0% error rate with 16 MHz processor clock.
4uS = 250,000Hz

I just pulled apart a non-working chinease copy of a PS3 controller and am reading the POTs easily, im going to drop the the idea of using the GC controller unless i see an easy way out. (For the moment anyways)