Nunchuck
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Le Nunchuk est une manette d'extension (via le port I2C) de la WiiMote. Il inclut un joystick analogique, 2 boutons et un accéléromètre 3 axes.
Remarque : le WiiChuck Adapter évite de "détruire" le connecteur de Nunchuk
Utilisation du Nunchuk avec l'Arduino
Comment relier le nunchuk :
The Nunchuck uses the I2C communication bus for the output signals. The color codes I had to use for the nunchuck I used were: * Red – Power (+3.3 V strictly) * White – Ground * Green – Analog In 4 * Black – Analog In 5
Relier le nunchuck à l'arduino
Ce lien contient également un programme qui permet de récupérer les valeurs pour les différents contrôles (accéléromètre, joystick et boutons).
Exemple de code Arduino
Utilisation pour piloter un(/deux) servo moteur(s) Media:NunchuckServo.pde.txt
Note : remplacer beginSerial par Serial.begin dans la fonction setup().
Wiichuck NMEA Sentence
/* * WiiChuckNMEA * * output wii nunckuck values in a NMEA 0183 formatted message * * $WICHK,JOYX,JOYY,ACCX,ACCY,ACCZ,ZBUT,CBUT*CHECKSUM[CR][LF] * * TODO Calcutate checksum (always 00) */ #include <Wire.h> #include "nunchuck_funcs.h" int loop_cnt=0; byte joyx,joyy,accx,accy,accz,zbut,cbut; //const int LEDPIN = 13; const int BAUD = 19200; void setup() { Serial.begin(BAUD); nunchuck_setpowerpins(); nunchuck_init(); // send the initilization handshake loop_cnt = 0; } void loop() { // if( loop_cnt > 100 ) { // every 100 msecs get new data nunchuck_get_data(); joyx = nunchuck_joyx(); joyy = nunchuck_joyy(); accx = nunchuck_accelx(); // ranges from approx 70 - 182 accy = nunchuck_accely(); // ranges from approx 65 - 173 accz = nunchuck_accelz(); // ranges from approx 65 - 173 zbut = nunchuck_zbutton(); cbut = nunchuck_cbutton(); // FOR DEBUG nunchuck_print_data(); Serial.print("$WICHK,"); Serial.print(joyx,DEC); Serial.print(","); Serial.print(joyy,DEC); Serial.print(","); Serial.print((byte)accx,DEC); Serial.print(","); Serial.print((byte)accx,DEC); Serial.print(","); Serial.print((byte)accz,DEC); Serial.print(","); Serial.print((byte)zbut,DEC); Serial.print(","); Serial.print((byte)cbut,DEC); Serial.print("*"); Serial.print("00"); Serial.print("\r\n"); // } loop_cnt++; delay(10); } byte calcChecksumBuf(byte checksum, byte buf[], int i, int len){ for(;i<len; i++){ checksum=calcChecksum(checksum,buf[i]); } return checksum; } byte calcChecksum(byte checksum, byte c){ if ( c == '$' ) return 0; if ( c != '\r' && c != '\n' && c != '*' ) { checksum ^= c; } return checksum; }