[Hardware] communication avec nunchuk Wii

Bon, tout existe sur le net, oui, mais voilà, je voudrais m'affranchir des trop lourdes librairies et coder du bien bourrin dans les registres pour gagner du temps et de la place dans mon arduino...

Mon projet : pondre une fonction minimaliste qui me renseigne les variables suivantes à chaque fois que je l'appelle :

int NunJoyX, NunJoyY, NunAccX, NunAccY, NunAccZ;
boolean NunBtnZ, NunBtnC;

void NunInit(){
  initialisation si nécessaire;
}

void NunDataCall(){
  récupération et traitement des données du nunchuk;
  // possibilité de filtrage des mouvements...
  mise à jour des 7 variables Nunxxxx;
}

Les valeurs de "repos" (c-à-d manette fixe horizontale, joystick relâché) seront à 0, d'où l'utilisation du format int (de plus, on a les valeurs de l'accéléro sur 10 bits semble-t-il.

On parle vaguement d'une liaison série I2C, mais est-ce réel?

Est-il nécessaire d'envoyer 0x00 sur l'I2C avant chaque lecture des données comme suit?

void send_zero (){
  Wire.beginTransmission (0x52);	// transmit to device 0x52
  Wire.send (0x00);		// sends one byte
  Wire.endTransmission ();	// stop transmitting
}

Dans ces 6 octets renvoyés, a-t-on réellement ceci :

l'adresse I2C du nunchuk est-il vraiment 0x52?

J'en suis là pour l'instant... j'ai piqué ça sur http://www.windmeadow.com/node/42.

Par la suite, je compte passer directement dans les registres du TWI de l'arduino pour coder tout ça (je suis comme ça! :grin: )

La suite de mes investigations :

Dans la mesure où on n'utiliserait le TWI (I2C) uniquement pour le nunchuk, ou encore uniquement en master, on peut s'affranchir grandement du Wire.h, un exemple est donné page 227 du datasheet en ASM et en C, une vingtaine de lignes de code suffisent (orienté registre) pour envoyer ou lire des données. Je mettrai de toutes façon ici les codes qui marchent, voire une nouvelle lib qui n'a pas besoin du Wire.h . :wink:

Reste une question épineuse : le contenu du registre TWSR7:3, 5 bits qui contiennent un code de statut (start envoyé, ACK reçu...) Mais la liste des codes "décrite plus loin dans la doc", je la cherche encore... ]:smiley: Si quelqu'un l'a, je suis preneur, je vais continuer à fouiller... :roll_eyes:

EDIT : j'ai trouvé : avr-libc: <util/twi.h>: TWI bit mask definitions, ça va mieux...

I have written a Wii Nunchuk library for Arduino. You could check it, it may help you. At the bottom of the page, there are some links that can help you, especially one to WiiBrew website.

Hope this can help you.

Best regards,
Gabriel Bianconi.

PS: I wrote in English because I can read French but can't write correctly.

Bonjour,

J'ai fait un article il y a peu sur l'utilisation d'un nunchunk avec une carte arduino, tu peut prendre le code comme exemple, tu vire les Serial.println() est cela devrait te donner la fonction que tu cherche.

Le lien vers mon article

Si tu veut partir sur un code orienté registre voila un exemple (avec une EEPROM I2C) : twitest.c
Mais comme la librairie Wire prend pas énormément de place c'est un peu "over kill" comme technique :slight_smile: