-
Notifications
You must be signed in to change notification settings - Fork 0
/
MAIN_PROJECT_XBOXTOGAMECUBEv2.ino
165 lines (135 loc) · 4.65 KB
/
MAIN_PROJECT_XBOXTOGAMECUBEv2.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include "Nintendo.h"
/* This code uses the Nicohood Library
* This code also uses the USB Host Shield Library 2.0 by Felis/Lauszus
* I used Simple Controllers/Froq's SmashBox code as a basis to develop this. They also aided me previously! so thank you.
* Without the three mentioned above, I wouldn't have been able to do this. So Thanks!
*This Code written/modified by That's So Mo
*This code is open source and its free to share, improve on, modify or anything you like!
*/
#include <XBOXRECV.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
USB Usb;
XBOXRECV Xbox(&Usb);
CGamecubeConsole GamecubeConsole1(8); //Defines a "Gamecube Console" sending data to the console on pin 8
Gamecube_Data_t d = defaultGamecubeData; //Structure for data to be sent to console
//This is needed but you don't need a controller on pin 7 apparently
CGamecubeController GamecubeController1(7);
void setup()
{
//This is needed to run the code.
GamecubeController1.read();
Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while (1); //halt
}
Serial.print(F("\r\nXbox Wireless Receiver Library Started"));
}
void loop()
{
Usb.Task();
if (Xbox.XboxReceiverConnected) {
for (uint8_t i = 0; i < 4; i++) {
if (Xbox.Xbox360Connected[i]) {
Xbox.setLedOn(LED1, i);
//This resets and establishes all the values after the controller sends them to the console and helps with initial "zeroing"
int pinA = 0;
int pinB = 0;
int pinX = 0;
int pinY = 0;
int pinZ = 0;
int pinSTART = 0;
int pinR = 0;
int pinL = 0;
int pinLEFT = 0;
int pinRIGHT = 0;
int pinUP = 0;
int pinDOWN = 0;
int pinCLEFT = 0;
int pinCRIGHT = 0;
int pinCUP = 0;
int pinCDOWN = 0;
int pinxAxisC = 128;
int pinyAxisC = 128;
int pinxAxis = 128;
int xmod = 0;
int pinyAxis = 128;
int rightOne = 0;
int leftOne = 0;
int downOne = 0;
int lefthaty = Xbox.getAnalogHat(LeftHatY, i); //This section assiocates maps the left analogue stick of the 360 controller to gamecube's left D stick.
int adjlefthaty = map(lefthaty, -32768, 32767, 128-86, 128+86);
int lefthatx = Xbox.getAnalogHat(LeftHatX, i);
int adjlefthatx = map(lefthatx, -32768, 32767, 128-86, 128+86);
int righthaty = Xbox.getAnalogHat(RightHatY, i); //This section assiocates maps the right analogue stick of the 360 controller to gamecube's right C stick.
int adjrighthaty = map(righthaty, -32768, 32767, 128-86, 128+86);
int righthatx = Xbox.getAnalogHat(RightHatX, i);
int adjrighthatx = map(righthatx, -32768, 32767, 128-86, 128+86);
if (Xbox.getButtonPress(B, i)){
pinB = 1;
}
if (Xbox.getButtonClick(XBOX, i)){ // This combination allows you to restart the GameCube - only useful if your using swiss to load games...etc.
pinB = 1;
pinR = 1;
pinZ = 1;
pinDOWN = 1;
}
if (Xbox.getButtonPress(A, i)){
pinA = 1;}
if (Xbox.getButtonPress(X, i)){
pinX = 1;}
if (Xbox.getButtonPress(Y, i)){
pinY = 1;}
if (Xbox.getButtonPress(UP, i)){
pinUP = 1;
}
if (Xbox.getButtonPress(DOWN, i)){
pinDOWN = 1;
}
if (Xbox.getButtonPress(LEFT, i)){
pinLEFT = 1;
}
if (Xbox.getButtonPress(RIGHT, i)){
pinRIGHT = 1;
}
if (Xbox.getButtonPress(R2, i)){
pinZ = 1;}
if (Xbox.getButtonPress(R1, i)){
pinR = 1;}
if (Xbox.getButtonPress(L1, i)){
pinL = 1;}
if (Xbox.getButtonPress(START, i)){
pinSTART = 1;}
pinxAxis = adjlefthatx;
pinyAxis = adjlefthaty;
pinxAxisC = adjrighthatx;
pinyAxisC = adjrighthaty;
//reports data'
d.report.a = pinA;
d.report.b = pinB;
d.report.x = pinX;
d.report.y = pinY;
d.report.z = pinZ;
d.report.start = pinSTART;
d.report.r = pinR;
d.report.l = pinL;
d.report.dup = pinUP;
d.report.dright = pinRIGHT;
d.report.ddown = pinDOWN;
d.report.dleft = pinLEFT;
d.report.xAxis = pinxAxis;
d.report.yAxis = pinyAxis;
d.report.cxAxis = pinxAxisC;
d.report.cyAxis = pinyAxisC;
//sends the complied data to console when console polls for the input
GamecubeConsole1.write(d);
}
}
}
}