Arduino Wii nunchuck och Wii motion plus med uppdaterad kod för IDE 1.0.2 och lysdioder (6 / 7 steg)
Steg 6: Wii Nunchuck kod
data kommer att passera rakt igenom, och du är redo att testa nunchuck men du behöver ny kod, öppna en ny arduino IDE, kopiera och klistra in koden:
Igen koden är inte min fast jag bara för att kunna köra i ned IDE och jag lagt till lysdioder, den ursprungliga koden är från denna webbsida:
http://www.windmeadow.com/Node/42
alla krediter för koden är för chadphillips
du behöver inte chage något i bakbord det fungerar med nunchuck
#include < Wire.h >
#include < string.h >
#undef int
#include < stdio.h >
uint8_t outbuf [6]. matrisen att lagra arduino utgång
int cnt = 0;
int ledPin = 13.
void
(setup)
{
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
Serial.BEGIN (19200);
Serial.Print ("färdiga setup\n");
Wire.BEGIN (); gå med i2c bussen med adress 0x52
nunchuck_init (); Skicka initilization handslag
}
void
nunchuck_init)
{
Wire.beginTransmission (0x52); överföra till enhet 0x52
Wire.write (0x40); skickar minnesadress
Wire.write (0x00); skickar skickade en nolla.
Wire.endTransmission (); stoppa överföring
}
void
send_zero)
{
Wire.beginTransmission (0x52); överföra till enhet 0x52
Wire.write (0x00); skickar en byte
Wire.endTransmission (); stoppa överföring
}
void
loop)
{
Wire.requestFrom (0x52, 6); begäran data från nunchuck
medan (Wire.available ())
{
outbuf [cnt] = nunchuk_decode_byte (Wire.read ()); ta emot byte som ett heltal
digitalWrite (ledPin, hög); anger LED på
CNT ++;
}
Om vi fått 6 byte, gå sedan skriva ut dem
om (cnt > = 5)
{
skriva ut ();
}
CNT = 0;
send_zero (); skicka begäran om nästa byte
fördröjning (10).
}
Skriva ut indata har vi fått
accel data är 10 bitar lång
så vi läsa 8 bitar, då måste vi lägga till
på de sista 2 bitarna. Det är därför jag
multiplicera dem med 2 * 2
void
skriva ut)
{
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;
byte outbuf [5] innehåller bitar för z- och c-knapparna
den innehåller också de minst signifikanta bitarna för accelerometer data
så vi måste kontrollera varje bit av byte outbuf [5]
om ((outbuf [5] >> 0) & 1)
{
z_button = 1;
}
om ((outbuf [5] >> 1) & 1)
{
c_button = 1;
}
om ((outbuf [5] >> 2) & 1)
{
accel_x_axis += 2.
}
om ((outbuf [5] >> 3) & 1)
{
accel_x_axis + = 1;
}
om ((outbuf [5] >> 4) & 1)
{
accel_y_axis += 2.
}
om ((outbuf [5] >> 5) & 1)
{
accel_y_axis + = 1;
}
om ((outbuf [5] >> 6) & 1)
{
accel_z_axis += 2.
}
om ((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");
om (z_button == 0) {
digitalWrite(7,HIGH);
}
annat if (c_button == 0) {
digitalWrite(8,HIGH);
}
annars om (joy_x_axis > = 190) {
digitalWrite(9,HIGH);
}
annars om (joy_x_axis < = 60) {
digitalWrite(10,HIGH);
}
annars om (joy_y_axis > = 190) {
digitalWrite(11,HIGH);
}
annars om (joy_y_axis < = 60) {
digitalWrite(12,HIGH);
}
annat {
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
}
}
Koda data om du vill formatera som de flesta wiimote förare utom
behövs endast om du använder en av de regelbundna wiimote förarna
röding
nunchuk_decode_byte (char x)
{
x = (x ^ 0x17) + 0x17;
återvändande x;
}