Aiuto con arduino Wiichuck

Salve ragazzi,
ho comprato un wiichuck dai cinesi tempo fa per fare qualche progettino di prova con arduino.
Il problema ora è che non riesco a capire un paio di cose sulla libreria wiichuck:

  1. non ci sono funzioni che richiedono il pin analogico utilizzato, quindi se voglio mettere il clock su A0 e i dati su A1 come faccio a comunicarlo alle funzioni?
    2)ho trovato online un tutorial ed ho effettuato i collegamenti che diceva li (anche se i colori dei miei fili son diversi essendo cinese) però il programma mi scrive cose strane sul monitor seriale, cose del tipo “àò @@ ãèìù” e altre lettere strane
  2. Il wiichuck funziona a 3,3v o 5v? ho trovato vari tutorial e alcuni utilizzano i 5, altri i 3,3

Lo sketch è questo (preso dal playground):

#include <Wire.h">
//#include "WiiChuckClass.h" //most likely its WiiChuck.h for the rest of us.
#include <WiiChuck.h>

WiiChuck chuck = WiiChuck();

void setup() {
  //nunchuck_init();
  Serial.begin(115200);
  chuck.begin();
  chuck.update();
  //chuck.calibrateJoy();
}

void loop() {
  delay(20);
  chuck.update(); 

  Serial.print(chuck.readJoyX());
    Serial.print(", ");  
  Serial.print(chuck.readJoyY());
    Serial.print(", ");  

  if (chuck.buttonZ) {
     Serial.print("Z");
  } else  {
     Serial.print("-");
  }

    Serial.print(", ");  

//not a function//  if (chuck.buttonC()) {
  if (chuck.buttonC) {
     Serial.print("C");
  } else  {
     Serial.print("-");
  }

    Serial.println();

}

Dove hai preso la libreria? Mi pare se ne trovino diverse in internet.

Una cosa che mi ricordo vagamente, di WiiNunchuck ne ho due, uno cinese da pochi euro e uno originale e bisognava cambiare una cosa nella libreria tra i due. Purtroppo non ricordo cosa.

La libreria l'ho presa dal playground di arduino.
Forse le cose da cambiare erano alcune costanti messe all'inizio della libreria, ho letto una cosa del genere.

Qualcuno saprebbe aiutarmi?

Io trovai ed adattai questo codice:

#include <Wire.h>
#include <string.h>
#include <stdio.h>

class Nunchuck
{ 
private:
  uint8_t outbuf[6];
  void _sendByte(byte data, byte location)
  { Wire.beginTransmission(0x52);
    Wire.write(data);  
    Wire.write(location);
    Wire.endTransmission();
    //delay(10);
  }  
  void _send_zero()
  { Wire.beginTransmission (0x52);
    Wire.write(0x00);
    Wire.endTransmission ();
  }
public:
  int Joy_x;
  int Joy_y;
  int Acc_x;
  int Acc_y;
  int Acc_z;
  int Button_z;
  int Button_c;
  int Type;
  
  void Init()
  { Wire.begin();
    if(Type==1)
      _sendByte(0xF0,0x55);
    else
      _sendByte(0x40,0x00);
  }
  void update()
  { int t;
    int cnt = 0;
    t++;
    long last = millis();
    if( t == 1) 
    { t = 0;
      Wire.requestFrom (0x52, 6);
      while (Wire.available()) 
      { outbuf[cnt] = Wire.read();  //nunchuk_decode_byte (Wire.read());
        cnt++;
      }
      cnt = 0;
      _send_zero();
    } // if(t==)
    Joy_x  = outbuf[0];
    Joy_y  = outbuf[1];
    Acc_x  = outbuf[2]; // * 2 * 2;
    Acc_y  = outbuf[3]; // * 2 * 2;
    Acc_z  = outbuf[4]; // * 2 * 2;
    Button_z = 1;
    Button_c = 1;
    if ((outbuf[5] >> 0) & 1)  Button_z = 0;
    if ((outbuf[5] >> 1) & 1)  Button_c = 0;
    if ((outbuf[5] >> 2) & 1)  Acc_x += 2;
    if ((outbuf[5] >> 3) & 1)  Acc_x += 1;
    if ((outbuf[5] >> 4) & 1)  Acc_y += 2;
    if ((outbuf[5] >> 5) & 1)  Acc_y += 1;
    if ((outbuf[5] >> 6) & 1)  Acc_z += 2;
    if ((outbuf[5] >> 7) & 1)  Acc_z += 1;
  } 
};

Nunchuck xnc;
int dtime=500;

void setup()
{ Serial.begin(9600);
  xnc.Type=1;
  xnc.Init();
  Serial.print("Finished setup\n");
}

void loop()
{ int i=0;
  xnc.update();
  Serial.print("X: ");    Dec2Str(xnc.Joy_x);  Serial.print ("\t");
  Serial.print("Y: ");    Dec2Str(xnc.Joy_y);  Serial.print ("\t");
  Serial.print("AccX: "); Dec2Str(xnc.Acc_x);  Serial.print ("\t");
  Serial.print("AccY: "); Dec2Str(xnc.Acc_y);  Serial.print ("\t");
  Serial.print("AccZ: "); Dec2Str(xnc.Acc_z);  Serial.print ("\t");
  Serial.print(xnc.Button_z,DEC);  Serial.print (" ");
  Serial.print(xnc.Button_c,DEC);  Serial.print ("\r\n");
  delay(dtime);
  i++;
  
}

void Dec2Str(int p_val)
{ char Str1[4];
  Str1[2]='0'+( p_val % 10);
  p_val=p_val/10;
  Str1[1]='0'+( p_val % 10);
  p_val=p_val/10;
  Str1[0]='0'+( p_val % 10);
  Str1[3]=0;
  Serial.print (Str1);  
}

Il .Type è 1 o 2 a seconda del tipo di Wii, ovvero nella Init():

if(Type==1)
  _sendByte(0xF0,0x55);
else
  _sendByte(0x40,0x00);

In pratica l’inizializzazione della comunicazione è diversa tra i due tipi di wiinunchuck

parli den nunchuk giusto ? lo chiamano anche wiicuck ?
metti una foto ?

comunque il nunchuk e' I2C, quindi deve stare su A4-A5 non puoi pilotarlo su pin diversi (sto, per pubblicare una libreria che permette l,utilizzo di aggeggi I2C su tutti i pin, ma sono all,estero, probabilmente fra 2 settimane)

Non ci sono info precise sull,alimentazione del nunchuck, a 3,3V vai tranquillo di restare nei limiti, ma moltissimi lo usano a 5V, me compreso, senza problemi.

sul discorso stampa cose strane stai usando appunto A4-A5 per scl-sda ? hai controllato il baudrate del serial monitor ? gioca con i fili, invertili, ogni cosino ha un colore a se.

c'e' una sequenza di inizializzazione che va bene sia sugli originali che sui cinesini, e non ha bisogno di decriptazione, cerca un po in giro

Io ho usato il Nunchuk con un adattatore da pochi euro che si inserisce nella spina del Nunchuck. Ora non ricordo se l'ho alimentato a 5 o a 3.3v, credo a 3.3v prelevandoli dall'Arduino stesso. Non ho usato invece alcun adattamento per le linee SDA e SCL

Si è un nunchuck cinese per la wii.
Ho provato ad usare il programma di quel sito web e ho rivisto i collegamenti, ora funziona tutto per bene, devo solo prendermi del tempo libero e capire bene come utilizzare le funzioni analizzando quello sketch.

Grazie mille a tutti