A consola Wii tem alguns acessórios para o seu comando, entre eles o magnifico Nunchuck!

Este magnífico acessório tem uma comunicação por I2C e tem os pinos da seguinte maneira:

1 - SCK - Serial Clock do barramento I2C

2 - NC - Sem ligação

3 - GND - Massa da alimentação

4 - 3.3V - Tensão de alimentação

5 - Present - Pino de deteção (valor lógico alto caso esteja ligado ao comando)

6 - SDA - Serial Data do barramento I2C

 

O endereço do comando é o 0x52 e funciona a uma velocidade de 100KHz. deixo aqui um pequeno pseudocódigo para fazer o interface:

    Iniciar periférico I2C a 100KHz;

    Escreve no endereço 0x52: 0x55, 0xF0;

    Escreve no endereço 0x52: 0xFB, 0x00;

 

Para fazer a leitura dos dados:

    Inicio;

    Ler 6 Bytes no endereço 0x52

 

  bit
Byte 7 6 5 4 3 2 1 0
0x00 Joystick X [7:0]
0x01 Joystick Y [7:0]
0x02 Acelerometro X [9:2]
0x03 Acelerometro Y [9:2]
0x04 Acelerometro Z [9:2]
0x05 Az[1:0], Ay[1:0], Ax[1:0], C,Z

A tabela anterior mostra como se interpreta o resultado: primeiros 2 bytes dão a informação do joystick, em XX e YY, variando entre 0 e 255. Os bytes 0x02, 0x03 e 0x04 dão a informação dos bits mais significativos [9:2] da aceleração nos eixos XX, YY e ZZ, e finalmente, o ultimo biteretorna os bits menos significativos de aceleração dos eixos, assim como o estado dos botões C e Z!

Curiosidade: O projecto MultiWii começou com a utilização deste controlador para estabilização dos primeiros quadrotors!!!