Buenas ahora es mi turno de hacer un thread hablando de mis expperiencias/experimentos con arduino. Ya que Daemon Freedom parece que esta en alguna menuda playa refresacandose (?) y braulio parece que no tiene el presupuesto para comprarse un potencimetro
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.zipY aca mi pequeña demo con el cual manejo con el joy 4 led por medio de PWM.
#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);
}
Los valores de X e Y serian: 20 min, 120 medio, 220 max.
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