Nunchuck

From air
Revision as of 03:11, 7 November 2012 by Donsez (talk | contribs) (→‎Exemple de code Arduino)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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 :

WiiArduino.jpgWiichuck.jpg

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;
}

Liens