Paso 6: Código de Nunchuck de Wii
los datos se pasan a través y usted está listo para probar el nunchuck pero necesita nuevo código, abrir un nuevo arduino IDE, copia y pega el código:
Otra vez el código no es mio que me fijo sólo para ser capaz de ejecutar en el IDE de ned y agregué leds, el código original es de esta página web:
http://www.windmeadow.com/node/42
todos los créditos para el código son para chadphillips
no es necesario cambiarla nada en el tablero que funciona con el nunchuck
#include < Wire.h >
#include < string.h >
#undef int
#include < stdio.h >
telefonía de uint8_t [6]; array para almacenar la salida de arduino
int cnt = 0;
int ledPin = 13;
vacío
(Setup)
{
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
Serial.Begin (19200);
Serial.Print ("setup\n final");
Wire.Begin (); Únete a bus i2c con dirección 0x52
nunchuck_init (); enviar el protocolo de inicialización
}
vacío
(nunchuck_init)
{
Wire.beginTransmission (0x52); transmitir al dispositivo 0x52
Wire.Write (0 x 40); envía la dirección de memoria
Wire.Write (0 x 00); envía envía un cero.
Wire.endTransmission (); interrumpir la transmisión
}
vacío
(send_zero)
{
Wire.beginTransmission (0x52); transmitir al dispositivo 0x52
Wire.Write (0 x 00); envía un byte
Wire.endTransmission (); interrumpir la transmisión
}
vacío
(bucle)
{
Wire.requestFrom (0x52, 6); solicitud datos del nunchuck
mientras que (Wire.available ())
{
telefonía [cnt] = nunchuk_decode_byte (Wire.read ()); recibe byte como un número entero
digitalWrite (ledPin, HIGH); el LED se pone en
CNT ++;
}
Si hemos recibido los bytes de 6, y luego ir imprimir
Si (cnt > = 5)
{
Imprimir ();
}
CNT = 0;
send_zero (); enviar la solicitud de los siguientes bytes
Delay (10);
}
Imprimir los datos que hemos recibido
datos de Accel están largo 10 bits
así leemos 8 bits, entonces tenemos que añadir
en los últimos 2 bits. Es por eso
multiplicar por 2 * 2
vacío
imprimir)
{
int joy_x_axis = telefonía [0];
int joy_y_axis = telefonía [1];
int accel_x_axis = telefonía [2] * 2 * 2;
int accel_y_axis = telefonía [3] * 2 * 2;
int accel_z_axis = telefonía [4] * 2 * 2;
int z_button = 0;
int c_button = 0;
telefonía de Byte [5] contiene bits de botones z y c
también contiene los bits menos significativos de los datos del acelerómetro
así que tenemos que comprobar cada bit del byte telefonía [5]
Si ((telefonía [5] >> 0) & 1)
{
z_button = 1;
}
Si ((telefonía [5] >> 1) & 1)
{
c_button = 1;
}
Si ((telefonía [5] >> 2) & 1)
{
accel_x_axis += 2;
}
Si ((telefonía [5] >> 3) & 1)
{
accel_x_axis += 1;
}
Si ((telefonía [5] >> 4) & 1)
{
accel_y_axis += 2;
}
Si ((telefonía [5] >> 5) & 1)
{
accel_y_axis += 1;
}
Si ((telefonía [5] >> 6) & 1)
{
accel_z_axis += 2;
}
Si ((telefonía [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);
}
else if (c_button == 0) {}
digitalWrite(8,HIGH);
}
else if (joy_x_axis > = 190) {}
digitalWrite(9,HIGH);
}
else if (joy_x_axis < = 60) {}
digitalWrite(10,HIGH);
}
else if (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);
}
}
Codificar los datos para el formato que la mayoría conductores de wiimote excepto
sólo es necesario si utilizas uno de los pilotos regulares de wiimote
carbón de leña
nunchuk_decode_byte (char x)
{
x = (x ^ 0x17) + 0x17;
return x;
}