/* * ArduinoNunchuk.cpp - Improved Wii Nunchuk library for Arduino * * Copyright 2011-2013 Gabriel Bianconi, http://www.gabrielbianconi.com/ * * Project URL: http://www.gabrielbianconi.com/projects/arduinonunchuk/ * * Based on the following resources: * http://www.windmeadow.com/node/42 * http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/ * http://wiibrew.org/wiki/Wiimote/Extension_Controllers * */ #include #include #include "ArduinoNunchuk.h" #define ADDRESS 0x52 void ArduinoNunchuk::init() { TinyWireM.begin(); ArduinoNunchuk::_sendByte(0x55, 0xF0); ArduinoNunchuk::_sendByte(0x00, 0xFB); ArduinoNunchuk::update(); } void ArduinoNunchuk::update() { int count = 0; int values[6]; TinyWireM.requestFrom(ADDRESS, 6); while(TinyWireM.available()) { values[count] = TinyWireM.receive(); count++; } ArduinoNunchuk::analogX = values[0]; ArduinoNunchuk::analogY = values[1]; ArduinoNunchuk::accelX = (values[2] << 2) | ((values[5] >> 2) & 3); ArduinoNunchuk::accelY = (values[3] << 2) | ((values[5] >> 4) & 3); ArduinoNunchuk::accelZ = (values[4] << 2) | ((values[5] >> 6) & 3); ArduinoNunchuk::zButton = !((values[5] >> 0) & 1); ArduinoNunchuk::cButton = !((values[5] >> 1) & 1); ArduinoNunchuk::_sendByte(0x00, 0x00); } void ArduinoNunchuk::_sendByte(byte data, byte location) { TinyWireM.beginTransmission(ADDRESS); TinyWireM.send(location); TinyWireM.send(data); TinyWireM.endTransmission(); delay(10); }