Bueno el tema del NunChuk es simple es hardware que cualquier adolesente tiene en su casa (excepto yo que tuve que pedir prestado ) y tiene muy lindas cosillas como es la palanca, los botones y el ... acelerometro!
El problema de la conexion era que tenias 2 opciones romper la ficha propietaria para conectar los cables o comprarte un extraño adaptador que venden por internet. Pero claro habia otra solucion! Hincar las agujas de los cables del protobard al puerto propietario
http://img819.imageshack.us/i/20100715220158295.jpg/
Tendriamos 4 cables: rojo 3.3v, blanco GND, verde Analog4, amarillo Analog5.
La libreria esta aqui:
http://todbot.com/arduino/sketches/WiichuckDemo.zip
Y aca mi pequeña demo con el cual manejo con el joy 4 led por medio de PWM.
Código:
#include <Wire.h>
#include <C:\nunchuck_funcs.h>
int loop_cnt=0;
byte accx,accy,zbut,cbut,ajjx,ajjy,menx,masx,meny,masy;
int mnx = 3;
int msx = 5;
int mny = 6;
int msy = 9;
int ledPin = 13;
void setup()
{
pinMode(mnx, OUTPUT);
pinMode(msx, OUTPUT);
pinMode(mny, OUTPUT);
pinMode(msy, OUTPUT);
nunchuck_setpowerpins();
nunchuck_init(); // send the initilization handshake
}
void loop()
{
nunchuck_get_data();
accx = nunchuck_accelx(); // ranges from approx 70 - 182
accy = nunchuck_accely(); // ranges from approx 65 - 173
ajjx = nunchuck_joyx();
ajjy = nunchuck_joyy();
zbut = nunchuck_zbutton();
cbut = nunchuck_cbutton();
//funcion masx
if (ajjx > 130)
{
if (ajjx > 210)
{
masx = 255;
}
else
{
masx = (ajjx - 120) * 255 / 100;
}
}
else
{
masx = 0;
}
//funcion menosx
if (ajjx < 110)
{
if (ajjx < 30)
{
menx = 255;
}
else
{
menx = (120 - ajjx) * 255 / 100;
}
}
else
{
menx = 0;
}
//comienza con los y
if (ajjy > 25)
{
if (ajjy > 210)
{
masy = 255;
}
else
{
masy = (ajjy - 120) * 255 / 100;
}
}
else
{
masy = 0;
}
//funcion menosy
if (ajjy < 110)
{
if (ajjy < 25)
{
meny = 255;
}
else
{
meny = (120 - ajjy) * 255 / 100;
}
}
else
{
meny = 0;
}
analogWrite(mnx, menx);
analogWrite(msx, masx);
analogWrite(mny, meny);
analogWrite(msy, masy);
delay(1);
}
Entonces si X o Y llegase a 130/110 se encenderia levemente el led y si supera los 210/30 (cerca del maximo teorico) el led se encedera al maximo.
PD: Si si el codigo es un asco se podria simplificar mucho con matrices pero era una simple prueba.
http://img413.imageshack.us/img413/4775/20100716090827556.jpg