Étape 6: Wii Nunchuck Code
les données vont passer à travers et vous êtes prêt à tester le nunchuck mais vous aurez besoin de nouveau code, ouvrez une nouvelle arduino IDE, copier et coller le code :
Encore une fois, le code n’est pas la mienne, que j’ai juste corrigé pour pouvoir s’exécuter dans l’IDE de ned et j’ai ajouté leds, le code original provient de cette page Web :
http://www.windmeadow.com/node/42
tous les crédits pour obtenir le code sont pour chadphillips
vous n’avez pas besoin de chage quoi que ce soit dans le montage d’essai que cela fonctionnera avec le nunchuck
#include < Wire.h >
#include < string.h >
#undef int
#include < stdio.h >
uint8_t outbuf [6] ; Tableau pour stocker la sortie de l’arduino
cnt int = 0 ;
int ledPin = 13 ;
Sub
le programme d’installation (en)
{
pinMode(7,OUTPUT) ;
pinMode(8,OUTPUT) ;
pinMode(9,OUTPUT) ;
pinMode(10,OUTPUT) ;
pinMode(11,OUTPUT) ;
pinMode(12,OUTPUT) ;
Serial.Begin (19200) ;
Serial.Print ("Finished setup\n") ;
Wire.Begin () ; Rejoignez les bus i2c avec adresse 0 x 52
nunchuck_init () ; Envoyer l’initialisation du handshake
}
Sub
nunchuck_init ()
{
Wire.beginTransmission (0 x 52) ; transmettre à un périphérique 0 x 52
Wire.Write (0 x 40) ; envoie l’adresse mémoire
Wire.Write (0 x 00) ; envoie a envoyé un zéro.
Wire.endTransmission () ; arrêter la transmission
}
Sub
send_zero ()
{
Wire.beginTransmission (0 x 52) ; transmettre à un périphérique 0 x 52
Wire.Write (0 x 00) ; envoie un octet
Wire.endTransmission () ; arrêter la transmission
}
Sub
(en boucle)
{
Wire.requestFrom (0 x 52, 6) ; données de demande du nunchuck
tandis que (Wire.available ())
{
outbuf [cnt] = nunchuk_decode_byte (Wire.read ()) ; recevoir des octets en tant qu’entier
digitalWrite (ledPin, HIGH) ; définit la LED sur
CNT ++ ;
}
Si nous avons reçu les 6 octets, puis aller les imprimer
Si (cnt > = 5)
{
imprimer () ;
}
CNT = 0 ;
send_zero () ; Envoyer la demande pour les octets suivants
retard (10) ;
}
Imprimer les données d’entrée, que nous avons reçu
données d’Accel sont 10 bits
donc nous lisons 8 bits, puis il faut ajouter
sur les 2 derniers bits. C’est pourquoi j’ai
multiplier par 2 * 2
Sub
imprimer ()
{
int joy_x_axis = outbuf [0] ;
int joy_y_axis = outbuf [1] ;
int accel_x_axis = outbuf [2] * 2 * 2 ;
int accel_y_axis = outbuf [3] * 2 * 2 ;
int accel_z_axis = outbuf [4] * 2 * 2 ;
int z_button = 0 ;
int c_button = 0 ;
outbuf Byte [5] contient les bits pour les touches z et c
Il contient également les bits les moins significatifs pour les données de l’accéléromètre
Il faut donc vérifier chaque bit de l’octet outbuf [5]
Si ((outbuf [5] >> 0) & 1)
{
z_button = 1 ;
}
Si ((outbuf [5] >> 1) & 1)
{
c_button = 1 ;
}
Si ((outbuf [5] >> 2) & 1)
{
accel_x_axis += 2 ;
}
Si ((outbuf [5] >> 3) & 1)
{
accel_x_axis += 1 ;
}
Si ((outbuf [5] >> 4) & 1)
{
accel_y_axis += 2 ;
}
Si ((outbuf [5] >> 5) & 1)
{
accel_y_axis += 1 ;
}
Si ((outbuf [5] >> 6) & 1)
{
accel_z_axis += 2 ;
}
Si ((outbuf [5] >> 7) & 1)
{
accel_z_axis += 1 ;
}
Serial.Print (joy_x_axis, DEC) ;
Serial.Print ("\t") ;
Serial.Print (joy_y_axis, DEC) ;
Serial.Print ("\t") ;
Serial.Print (accel_x_axis, DEC) ;
Serial.Print ("\t") ;
Serial.Print (accel_y_axis, DEC) ;
Serial.Print ("\t") ;
Serial.Print (accel_z_axis, DEC) ;
Serial.Print ("\t") ;
Serial.Print (z_button, DEC) ;
Serial.Print ("\t") ;
Serial.Print (c_button, DEC) ;
Serial.Print ("\t") ;
Serial.Print ("\r\n") ;
Si (z_button == 0) {}
digitalWrite(7,HIGH) ;
}
ElseIf (c_button == 0) {}
digitalWrite(8,HIGH) ;
}
ElseIf (joy_x_axis > = 190) {}
digitalWrite(9,HIGH) ;
}
ElseIf (joy_x_axis < = 60) {}
digitalWrite(10,HIGH) ;
}
ElseIf (joy_y_axis > = 190) {}
digitalWrite(11,HIGH) ;
}
ElseIf (joy_y_axis < = 60) {}
digitalWrite(12,HIGH) ;
}
else {}
digitalWrite(7,LOW) ;
digitalWrite(8,LOW) ;
digitalWrite(9,LOW) ;
digitalWrite(10,LOW) ;
digitalWrite(11,LOW) ;
digitalWrite(12,LOW) ;
}
}
Encoder des données pour mettre en forme que la plupart des pilotes wiimote sauf
nécessaire uniquement si vous utilisez un des pilotes réguliers wiimote
omble chevalier
nunchuk_decode_byte (char x)
{
x = (x ^ 0 x 17) + 0 x 17 ;
Return x ;
}