Stap 6: Wii Nunchuck Code
de gegevens zullen passeren recht, en u bent klaar om te testen de nunchuck maar je moet nieuwe code, open een nieuwe arduino IDE, kopiëren en plakken van de code:
Weer de code is niet de mijne die ik gewoon vast te kunnen uitvoeren in de ned IDE en voegde ik leds, de originele code is van deze webpagina:
http://www.windmeadow.com/node/42
alle credits voor de code zijn voor chadphillips
u hoeft niet te wijzigen om het even wat in het breadboard dat het met de nunchuck werken zal
#include < Wire.h >
#include < string.h >
#undef int
#include < stdio.h >
uint8_t outbuf [6]; matrix voor het opslaan van de output van de arduino
int cnt = 0;
int ledPin = 13;
ongeldig
Setup)
{
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
Serial.begin (19200);
Serial.Print ("afgewerkte setup\n");
Wire.begin (); Join i2c bus met adres 0x52
nunchuck_init (); Stuur de handdruk initilization
}
ongeldig
nunchuck_init)
{
Wire.beginTransmission (0x52); verzenden naar apparaat 0x52
Wire.write (0x40); stuurt geheugenadres
Wire.write (0x00); stuurt verzonden een nul.
Wire.endTransmission (); stoppen met het verzenden van
}
ongeldig
send_zero)
{
Wire.beginTransmission (0x52); verzenden naar apparaat 0x52
Wire.write (0x00); stuurt één byte
Wire.endTransmission (); stoppen met het verzenden van
}
ongeldig
lus)
{
Wire.requestFrom (0x52, 6); aanvraaggegevens uit nunchuck
terwijl (Wire.available ())
{
outbuf [cnt] = nunchuk_decode_byte (Wire.read ()); Ontvangen bytes als integer
digitalWrite (ledPin, hoge); Hiermee stelt u de LED op
CNT ++;
}
Als we de 6 bytes ontvangen, ga dan afdrukken
Als (cnt > = 5)
{
afdrukken ();
}
CNT = 0;
send_zero (); stuurt het verzoek om de volgende bytes
vertraging (10);
}
Afdrukken van de invoergegevens die we hebben ontvangen
accel gegevens is 10 bits lang
zodat wij 8 bits lezen, dan moeten zullen we toevoegen
op de laatste 2 bits. Dat is waarom ik
Ze vermenigvuldigen met 2 * 2
ongeldig
afdrukken)
{
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 [5] van de byte bevat bits voor knoppen z en c
het bevat ook de minst significante bits voor de versnellingsmeter-gegevens
dus we hebben om te controleren van elke bit van byte outbuf [5]
Als ((outbuf [5] >> 0) & 1)
{
z_button = 1;
}
Als ((outbuf [5] >> 1) & 1)
{
c_button = 1;
}
Als ((outbuf [5] >> 2) & 1)
{
accel_x_axis += 2;
}
Als ((outbuf [5] >> 3) & 1)
{
accel_x_axis += 1;
}
Als ((outbuf [5] >> 4) & 1)
{
accel_y_axis += 2;
}
Als ((outbuf [5] >> 5) & 1)
{
accel_y_axis += 1;
}
Als ((outbuf [5] >> 6) & 1)
{
accel_z_axis += 2;
}
Als ((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");
Als (z_button == 0) {}
digitalWrite(7,HIGH);
}
else if (c_button == 0) {}
digitalWrite(8,HIGH);
}
anders als (joy_x_axis > = 190) {}
digitalWrite(9,HIGH);
}
else if (joy_x_axis < = 60) {}
digitalWrite(10,HIGH);
}
anders als (joy_y_axis > = 190) {}
digitalWrite(11,HIGH);
}
else if (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);
}
}
Coderen gegevens opmaken dat meeste wiimote bestuurders behalve
alleen nodig als u een van de regelmatige wiimote stuurprogramma's gebruiken
char
nunchuk_decode_byte (char x)
{
x = (x ^ 0x17) + 0x17;
return x;
}