lesto:
Hola,
ieri stavo testando un algoritmo per i giroscopi per ma imu a 6 gradi di libertà (3 accelerometro e 3 giroscopio), quando mi sono accorto che uno dei giroscopi non funziona bene. Quindi ho comprato un motion plus.
Si utilizza con il bus i2c e fin quì tutto ok. Ora però devo usarlo insieme ad un nunchuck, anch'esso in i2c. li ho collegati in parallelo (giusto?) a vcc, sda, scl e gnd.
ho poi recuperato il codice, che però non sembra funzionare. Non so se questo sia dovuto al fatto che il nunchuck non è originale (ma mi pare strano, altrimenti la wii come fa?)e quindi volevo sapere se qualcuno ha provato, o se i collegamenti sono corretti.
Il codice l'ho preso quì: http://voidbot.net/nunchchuk-and-wii-motion-plus-6-DOF.html purtroppo il nunchuck è già smontato e quindi non riesco a collegarlo come in figura (nel retro del motion plus), e non possiedo il cacciavite perticolare richiesto per aprire il motion plus.
Suggerimenti? le viti sono a Y, ovvero stella a 3 punte, più tardi vedo se ce l'ha il ferramenta sotto casa 
vi tengo informati, se avete suggerimenti sono tutto orecchi 
Non so se ti può essere d'aiuto, ma questo codice per il nunchuck sicuramente funziona:
// Piedinatura per Joystick
//
// 3
// | tasto C = 8
// 5- -6 tasto Z = 7
// |
// 11
//
// Collegamenti connettore Nunchuck
// GIALLO = A5
// VERDE = A4
// ROSSO = 3.3
// BIANCO = GND
//
// Collegamenti LED e servocomandi
// BLU (UP) = 3
// VERDE (LEFT) = 5
// ARANCIO (DOWN) = 11
// GIALLO (RIGHT) = 6
// ARANCIO/NERO (C) = 8
// GIALLO/NERO (Z) = 7
//
// Collegamento servocomando
// Asse X = 9
// Asse Y = 10
#include <Wire.h>
#include <Servo.h>
#define up 3
#define down 11
#define left 5
#define right 6
#define cbutton 8
#define zbutton 7
uint8_t buf[6];
int cnt=0;
Servo srvx;
Servo srvy;
uint8_t nunchuk_decode(uint8_t x)
{
return (x^0x17)+0x17;
}
void nunchuck_ack()
{
Wire.beginTransmission(0x52);
Wire.send(0);
Wire.endTransmission();
}
void setup()
{
int n;
Serial.begin(115200);
for(n=0; n<6; n++) buf[n]=0;
Wire.begin();
Wire.beginTransmission(0x52);
Wire.send(0x40);
Wire.send(0);
Wire.endTransmission();
srvx.attach(9);
srvy.attach(10);
pinMode(cbutton, OUTPUT);
pinMode(zbutton, OUTPUT);
pinMode(up, OUTPUT);
pinMode(down, OUTPUT);
pinMode(left, OUTPUT);
pinMode(right, OUTPUT);
analogWrite(up, 0);
analogWrite(down, 0);
analogWrite(left, 0);
analogWrite(right, 0);
}
void loop()
{
int n, x ,y;
Wire.requestFrom(0x52, 6);
while(Wire.available())
{
buf[cnt++] = nunchuk_decode(Wire.receive());
}
if(cnt>=6)
{
// Asse X
n=(buf[2]<<2)+((buf[5]>>2)&3)-524; // accel X
n = map(n,-200,200, 0, 180);
srvx.write(n);
// Asse Y
n=(buf[3]<<2)+((buf[5]>>4)&3)-597; // accel Y
n = map(n,-200,200, 0, 180);
srvy.write(n);
/*
// Asse Z
n=(buf[4]<<2)+((buf[5]>>6)&3); //-668; // accel Z
n = map(n,-150,150, 0, 180);
srvz.write(n);
*/
x = buf[0]-127;
y = buf[1]-127;
if (y > 10) digitalWrite(up, HIGH);
else digitalWrite(up, LOW);
if (y < -10) digitalWrite(down, HIGH);
else digitalWrite(down, LOW);
if (x > 10) digitalWrite(right, HIGH);
else digitalWrite(right, LOW);
if (x < -10) digitalWrite(left, HIGH);
else digitalWrite(left, LOW);
digitalWrite(zbutton, buf[5]&1 ? LOW : HIGH);
digitalWrite(cbutton, buf[5]&2 ? LOW : HIGH);
cnt=0;
nunchuck_ack();
delay(10);
}
}
Il risultato è questo:
Magari prova a vedere anche questo, potrebbe aiutarti: http://www.multiwii.it/come-preparare-il-nunchuck/
Spero di esserti stato di aiuto.
Ciao.