aboutsummaryrefslogtreecommitdiff
path: root/libraries
diff options
context:
space:
mode:
authorDonald Delmar Davis <don@suspectdevices.com>2013-02-02 15:13:20 -0800
committerDonald Delmar Davis <don@suspectdevices.com>2013-02-02 15:13:20 -0800
commit0b5f07dd03905e48e1d8de75240f0a3260e7fadb (patch)
tree1353b3d0a59baba7b095eb24c2a067b3baa32c66 /libraries
parente2a70687030570585c7dad99ca6437bd07442e06 (diff)
Lets make this work.HEADmaster
Diffstat (limited to 'libraries')
-rwxr-xr-xlibraries/WiiChuck/WiiChuck.cpp137
-rwxr-xr-xlibraries/WiiChuck/WiiChuck.h69
2 files changed, 206 insertions, 0 deletions
diff --git a/libraries/WiiChuck/WiiChuck.cpp b/libraries/WiiChuck/WiiChuck.cpp
new file mode 100755
index 0000000..e18dd59
--- /dev/null
+++ b/libraries/WiiChuck/WiiChuck.cpp
@@ -0,0 +1,137 @@
+/*
+ * WiiChuck
+ * Flamingo EDA http://www.flamingoeda.com
+ *
+ */
+
+#include "WiiChuck.h"
+
+void WiiChuck::init()
+{
+ Wire.begin();
+ Wire.beginTransmission(WII_I2C_ADDR);
+ Wire.send(0x40);
+ Wire.send(0x00);
+ Wire.endTransmission();
+}
+
+void WiiChuck::initWithPower()
+{
+ initWithPowerPins(PORTC3, PORTC2);
+}
+
+void WiiChuck::initWithPowerPins(byte powerPin, byte gndPin)
+{
+ DDRC |= _BV(powerPin) | _BV(gndPin);
+ PORTC &= ~_BV(gndPin);
+ PORTC |= _BV(powerPin);
+ delay(100);
+ init();
+}
+
+boolean WiiChuck::read()
+{
+ int count = 0;
+ Wire.requestFrom(WII_I2C_ADDR, PACKAGE_LENGTH);
+ while(Wire.available()) {
+ buffer[count++] = decodeByte(Wire.receive());
+ }
+ // send request for next bytes
+ sendNullRequest();
+
+ if (count < 5) {
+ return false;
+ }
+
+ // update data
+
+ joyAxisX = buffer[0];
+ joyAxisY = buffer[1];
+ accelAxisX = buffer[2];
+ accelAxisY = buffer[3];
+ accelAxisZ = buffer[4];
+
+ buttonZ = 0;
+ buttonC = 0;
+ if ((buffer[5] >> 0) & 1) {
+ buttonZ = 1;
+ }
+ if ((buffer[5] >> 1) & 1) {
+ buttonC = 1;
+ }
+
+ if ((buffer[5] >> 2) & 1) {
+ accelAxisX += 2;
+ }
+ if ((buffer[5] >> 3) & 1) {
+ accelAxisX += 1;
+ }
+
+ if ((buffer[5] >> 4) & 1) {
+ accelAxisY += 2;
+ }
+ if ((buffer[5] >> 5) & 1) {
+ accelAxisY += 1;
+ }
+
+ if ((buffer[5] >> 2) & 1) {
+ accelAxisZ += 2;
+ }
+ if ((buffer[5] >> 3) & 1) {
+ accelAxisZ += 1;
+ }
+
+ return true;
+}
+
+int WiiChuck::getJoyAxisX()
+{
+ return joyAxisX;
+}
+
+int WiiChuck::getJoyAxisY()
+{
+ return joyAxisY;
+}
+
+int WiiChuck::getAccelAxisX()
+{
+ return accelAxisX;
+}
+
+int WiiChuck::getAccelAxisY()
+{
+ return accelAxisY;
+}
+
+int WiiChuck::getAccelAxisZ()
+{
+ return accelAxisZ;
+}
+
+int WiiChuck::getButtonZ()
+{
+ return buttonZ;
+}
+
+int WiiChuck::getButtonC()
+{
+ return buttonC;
+}
+
+/*****************************************************************************
+ * PRIVATE METHODS
+ ****************************************************************************/
+
+byte WiiChuck::decodeByte(byte x)
+{
+ x = (x ^ 0x17) + 0x17;
+ return x;
+}
+
+void WiiChuck::sendNullRequest()
+{
+ Wire.beginTransmission(WII_I2C_ADDR);
+ Wire.send(0x00);
+ Wire.endTransmission();
+}
diff --git a/libraries/WiiChuck/WiiChuck.h b/libraries/WiiChuck/WiiChuck.h
new file mode 100755
index 0000000..1489d61
--- /dev/null
+++ b/libraries/WiiChuck/WiiChuck.h
@@ -0,0 +1,69 @@
+/*
+ * WiiChuck
+ * Flamingo EDA http://www.flamingoeda.com
+ *
+ */
+
+#ifndef WII_CHUCK_H
+#define WII_CHUCK_H
+
+#include <WProgram.h>
+#include <Wire.h>
+
+
+#define WII_I2C_ADDR 0x52
+#define PACKAGE_LENGTH 6
+
+extern TwoWire Wire;
+
+class WiiChuck {
+
+ public:
+ /**
+ * Initialize and join the I2C bus.
+ */
+ void init();
+
+ /**
+ * Initialize and join I2C bus with default power pins.
+ * POWER: PC3 (Analog 3 pin in Arduino)
+ * GND: PC2 (Analog 2 pin in Arduino)
+ */
+ void initWithPower();
+
+ /**
+ * Initialize and join I2C bus with specified power pins.
+ */
+ void initWithPowerPins(byte powerPin, byte gndPin);
+
+ /**
+ * Read data from nunchuck.
+ */
+ boolean read();
+
+ int getJoyAxisX();
+ int getJoyAxisY();
+ int getAccelAxisX();
+ int getAccelAxisY();
+ int getAccelAxisZ();
+ int getButtonZ();
+ int getButtonC();
+
+ private:
+ byte decodeByte(byte x);
+ void sendNullRequest();
+
+ private:
+ uint8_t buffer[PACKAGE_LENGTH];
+ int joyAxisX;
+ int joyAxisY;
+ int accelAxisX;
+ int accelAxisY;
+ int accelAxisZ;
+ int buttonZ;
+ int buttonC;
+};
+
+
+#endif
+