Paso 2: Software
Después de recibir a mi Leonardo nuevo brillante, empecé mirando cómo iba a conseguir todos los trabajadores. Puesto que el Wiichuck utiliza alimentación de 5 V y se comunica via I2C, el cableado era relativamente simple. ¡ Simplemente enganchado las 5 líneas V, GND, SDA y SCL a los puertos correspondientes en el Leonardo y estaba listo para ir.El software fue un poco más difícil. Me tomó bastante tiempo y mucha experimentación para encontrar código que iba a funcionar para lo que necesitaba. Como he mencionado anteriormente, tanto la biblioteca de funciones del Nunchuck (que he incluido en este instructable) y el código fuente original (que parece que no puedo llegar a subir correctamente, así que lo de copiar y pegar abajo) fueron escritos por otros y luego modificados para mis propósitos.
Esencialmente, lo que hace el código es utilizar la biblioteca Nunchuck para obtener datos de la ' tirada cada 10 ms. haber establecido un rango para a el mouse, el código utiliza esta gama para determinar el umbral de reposo de joystick. Después de que el bucle principal lee la C y Z botón y salidas como la izquierda y derecha mouse los botones, el código y luego pasa en leer el x y y hachas. Después de restar el valor de posición del centro de la lectura recibida, se compara el valor absoluto resultante a la variable de umbral. Si el valor es menor que el umbral para el movimiento, la distancia de movimiento se establece en 0, si la distancia medida es la distancia de lectura. Si x o y la distancia es 0 no, el ratón mueve la distancia correspondiente.
Cabe señalar que todo este proceso puede funcionar igual de bien con el acelerómetro. En lugar de utilizar las funciones nunchuck_joyx e y, uno podría utilizar factible nunchuck_accelx y y. No lo recomiendo, sin embargo. Los resultados al tratar de utilizar el ratón pueden ser... squirrely.
Ratón de WiiChuck
Brian Krukoski
De abril de 2012
rojo-+ 5 blanco-gnd, verde-sda, yllw-clck
#include < Wire.h >
#include "nunchuck_funcs.h"
int loop_cnt = 0;
parámetros de lectura de la palanca de mando:
int rango = 40; gama de salida de X o Y movimiento
umbral de int = rango/10; umbral de reposo
int centro = rango/2; valor de la posición de descanso
Boolean mouseIsActive = false; controlar el ratón o no
int lastSwitchState = bajo; estado anterior del interruptor
void setup() {}
inicialización de la Wiichuck
nunchuck_init();
tomar el control del ratón:
Mouse.Begin();
Serial.Begin(9600);
}
void loop() {}
Si (loop_cnt > 10) {/ / cada 10 milisegundos Obtén nuevos datos
loop_cnt = 0;
nunchuck_get_data();
a la derecha y la izquierda haga clic en control
int leftState = nunchuck_cbutton();
Si (leftState) Mouse.press(MOUSE_LEFT); Mouse.release(MOUSE_LEFT) otra cosa;
int rightState = nunchuck_zbutton();
Si (rightState) Mouse.press(MOUSE_RIGHT); Mouse.release(MOUSE_RIGHT) otra cosa;
leer el eje x
int xReading = nunchuck_joyx(); pide a nunchuck_funcs biblioteca x lectura eje
xReading = mapa (xReading, 38, 232, 0, rango); 38 y 232 arbitrariamente determinado a través de la experimentación, asigna al rango 0 y preselección
int xDistance = xReading - centro;
Si (abs(xDistance) < umbral) //if valor absoluto de xDistance es menor que el umbral predefinido...
{
xDistance = 0;
}
leer el eje y
int yReading = nunchuck_joyy(); pide a nunchuck_funcs biblioteca para lectura del eje de y
yReading = mapa (yReading, 38, 232, 0, rango); 38 y 232 arbitrariamente determinado a través de la experimentación, asigna al rango 0 y preselección
int yDistance = yReading - centro;
Si (abs(yDistance) < umbral) //if valor absoluto de yDistance es menor que el umbral predefinido...
{
yDistance = 0;
}
Mueva el ratón, si las lecturas estaban por encima de 0
Si ((xDistance! = 0) || (yDistance! = 0)) {
Mouse.Move (xDistance, - yDistance, 0); -yDistance asegura joystick estilo invertido
}
}
nunchuck_print_data(); imprime los datos del nunchuck a serial monitor para fines de depuración
loop_cnt ++;
Delay(1);
}