Skip to content

Commit e5b39d6

Browse files
committed
Merge remote-tracking branch 'eduardofv/master' into avr-update
Apply digistump/pull/54
2 parents 55f8097 + 8132f5f commit e5b39d6

File tree

7 files changed

+226
-0
lines changed

7 files changed

+226
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*swp
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* ArduinoWiiClassicController.h - Wii Classic Controller for Arduino / Digispark
3+
*
4+
* Copyright 2017 Eduardo Flores - Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
5+
* http://eduardofv.com/2017/02/06/wii-classic-controller-usb-arduino/
6+
* https://github.com/eduardofv/ArduinoWiiClassicController
7+
*
8+
* Based on ArduinoNunchuck by Gabriel Bianconi
9+
*
10+
*/
11+
12+
#include <Arduino.h>
13+
#include <TinyWireM.h>
14+
#include "ArduinoWiiClassicController.h"
15+
16+
#define ADDRESS 0x52
17+
18+
void ArduinoWiiClassicController::init()
19+
{
20+
TinyWireM.begin();
21+
22+
ArduinoWiiClassicController::_sendByte(0x55, 0xF0);
23+
ArduinoWiiClassicController::_sendByte(0x00, 0xFB);
24+
25+
ArduinoWiiClassicController::update();
26+
}
27+
28+
void ArduinoWiiClassicController::update()
29+
{
30+
int count = 0;
31+
int values[6];
32+
33+
//Read data
34+
TinyWireM.requestFrom(ADDRESS, 6);
35+
while(TinyWireM.available())
36+
{
37+
values[count] = TinyWireM.receive();
38+
count++;
39+
}
40+
41+
//Left Analog Stick
42+
ArduinoWiiClassicController::leftAnalogX = values[0] & 63;
43+
ArduinoWiiClassicController::leftAnalogY = values[1] & 63;
44+
45+
//Right Analog Stick
46+
// efv: simplify these once sure they're ok
47+
unsigned int rx = (values[2] & 128) >> 7;
48+
rx = rx | ((values[1] & 192) >> 5);
49+
rx = rx | ((values[0] & 192) >> 3);
50+
ArduinoWiiClassicController::rightAnalogX = rx;
51+
ArduinoWiiClassicController::rightAnalogY = values[2] & 31;
52+
53+
//Left Trigger
54+
unsigned int lt = (values[3] >> 5);
55+
lt = lt | ((values[2] & 96) >> 2);
56+
ArduinoWiiClassicController::leftTrigger = lt;
57+
58+
//Right Trigger
59+
ArduinoWiiClassicController::rightTrigger = values[3] & 31;
60+
61+
//Trigger digital buttons
62+
ArduinoWiiClassicController::leftTriggerButton = !((values[4] & 32) >> 5);
63+
ArduinoWiiClassicController::rightTriggerButton = !((values[4] & 2) >> 1);
64+
65+
//DPad
66+
ArduinoWiiClassicController::dpadUp = !(values[5] & 1);
67+
ArduinoWiiClassicController::dpadLeft = !((values[5] >> 1) & 1);
68+
ArduinoWiiClassicController::dpadDown = !((values[4] >> 6) & 1);
69+
ArduinoWiiClassicController::dpadRight = !((values[4] >> 7) & 1);
70+
71+
//All the other buttons
72+
ArduinoWiiClassicController::minusButton = !((values[4] >> 4) & 1);
73+
ArduinoWiiClassicController::homeButton = !((values[4] >> 3) & 1);
74+
ArduinoWiiClassicController::plusButton = !((values[4] >> 2) & 1);
75+
ArduinoWiiClassicController::zLeftButton = !((values[5] >> 7) & 1);
76+
ArduinoWiiClassicController::bButton = !((values[5] >> 6) & 1);
77+
ArduinoWiiClassicController::yButton = !((values[5] >> 5) & 1);
78+
ArduinoWiiClassicController::aButton = !((values[5] >> 4) & 1);
79+
ArduinoWiiClassicController::xButton = !((values[5] >> 3) & 1);
80+
ArduinoWiiClassicController::zRightButton = !((values[5] >> 2) & 1);
81+
82+
ArduinoWiiClassicController::_sendByte(0x00, 0x00);
83+
}
84+
85+
void ArduinoWiiClassicController::_sendByte(byte data, byte location)
86+
{
87+
TinyWireM.beginTransmission(ADDRESS);
88+
89+
TinyWireM.send(location);
90+
TinyWireM.send(data);
91+
92+
TinyWireM.endTransmission();
93+
94+
delay(10);
95+
}
96+
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* ArduinoWiiClassicController.h - Wii Classic Controller for Arduino / Digispark
3+
*
4+
* Copyright 2017 Eduardo Flores - Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
5+
* http://eduardofv.com/2017/02/06/wii-classic-controller-usb-arduino/
6+
* https://github.com/eduardofv/ArduinoWiiClassicController
7+
*
8+
* Based on ArduinoNunchuck by Gabriel Bianconi
9+
*
10+
*/
11+
12+
#ifndef ArduinoWiiClassicController_H
13+
#define ArduinoWiiClassicController_H
14+
15+
#include <Arduino.h>
16+
17+
class ArduinoWiiClassicController
18+
{
19+
public:
20+
int leftAnalogX;
21+
int leftAnalogY;
22+
int rightAnalogX;
23+
int rightAnalogY;
24+
25+
int leftTrigger; //Analog, when partially pressed
26+
int rightTrigger; //Analog, when partially pressed
27+
28+
int dpadUp;
29+
int dpadDown;
30+
int dpadLeft;
31+
int dpadRight;
32+
33+
int leftTriggerButton; //Digital, when fully pressed
34+
int rightTriggerButton; //Digital, when fully pressed
35+
int minusButton;
36+
int homeButton;
37+
int plusButton;
38+
int zLeftButton;
39+
int bButton;
40+
int yButton;
41+
int aButton;
42+
int xButton;
43+
int zRightButton;
44+
45+
void init();
46+
void update();
47+
48+
private:
49+
void _sendByte(byte data, byte location);
50+
};
51+
52+
#endif
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
LICENSE
2+
3+
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
WiiClassicController - Library for the WCC for the Digispark / Arduino
2+
3+
Copyright 2017 Eduardo Flores - Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
4+
http://eduardofv.com/2017/02/06/wii-classic-controller-usb-arduino/
5+
https://github.com/eduardofv/ArduinoWiiClassicController
6+
7+
Based on ArduinoNunchuck by Gabriel Bianconi
8+
https://github.com/eduardofv/DigistumpArduino/tree/master/digistump-avr/libraries/Nunchuk
9+
Project URL: http://www.gabrielbianconi.com/projects/arduinonunchuk/
10+
11+
12+
Based on the following resources:
13+
- http://www.windmeadow.com/node/42
14+
- http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/
15+
- http://wiibrew.org/wiki/Wiimote/Extension_Controllers
16+
- http://www.instructables.com/id/USB-Wii-Classic-Controller/step9/Reading-the-Wii-Classic-Controller/
17+
- http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Classic_Controller
18+
19+
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Use your Wii Classic Controller as a USB Joystick
3+
*/
4+
5+
#include <DigiJoystick.h>
6+
#include <ArduinoWiiClassicController.h>
7+
8+
ArduinoWiiClassicController classic = ArduinoWiiClassicController();
9+
10+
void setup() {
11+
classic.init();
12+
}
13+
14+
15+
void loop() {
16+
classic.update();
17+
18+
//Left Stick
19+
DigiJoystick.setX(byte(map(classic.rightAnalogX,0,32,0,255)));
20+
DigiJoystick.setY(byte(map(classic.rightAnalogY,0,32,255,0))); //Invert Y axis. Check on Windows
21+
22+
//Right Stick
23+
DigiJoystick.setXROT(byte(map(classic.leftAnalogX,0,64,0,255)));
24+
DigiJoystick.setYROT(byte(map(classic.leftAnalogY,0,64,255,0))); //Invert Y axis. Check on Windows
25+
26+
//Analog buttons
27+
DigiJoystick.setZROT(byte(map(classic.rightTriggerButton,0,32,0,255)));
28+
DigiJoystick.setSLIDER(byte(map(classic.leftTriggerButton,0,32,0,255)));
29+
30+
byte buttonLSB = 0;
31+
bitWrite(buttonLSB, 0, classic.rightTriggerButton);
32+
bitWrite(buttonLSB, 1, classic.leftTriggerButton);
33+
bitWrite(buttonLSB, 2, classic.minusButton);
34+
bitWrite(buttonLSB, 3, classic.homeButton);
35+
bitWrite(buttonLSB, 4, classic.plusButton);
36+
bitWrite(buttonLSB, 5, classic.aButton);
37+
bitWrite(buttonLSB, 6, classic.bButton);
38+
bitWrite(buttonLSB, 7, classic.yButton);
39+
40+
byte buttonMSB = 0;
41+
bitWrite(buttonMSB, 0, classic.xButton);
42+
bitWrite(buttonMSB, 1, classic.dpadUp);
43+
bitWrite(buttonMSB, 2, classic.dpadDown);
44+
bitWrite(buttonMSB, 3, classic.dpadRight);
45+
bitWrite(buttonMSB, 4, classic.dpadLeft);
46+
bitWrite(buttonMSB, 5, classic.zLeftButton);
47+
bitWrite(buttonMSB, 6, classic.zRightButton);
48+
bitWrite(buttonMSB, 7, 0);
49+
50+
DigiJoystick.setButtons(buttonLSB,buttonMSB);
51+
DigiJoystick.delay(10);
52+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ArduinoNunchuk KEYWORD1
2+
init KEYWORD2
3+
update KEYWORD2

0 commit comments

Comments
 (0)