Stap 2: Software
Na ontvangst van mijn glimmende nieuwe Leonardo, begon ik op zoek naar hoe ik ging om het te krijgen alle werken. Aangezien de Wiichuck maakt gebruik van 5 V power en via I2C communiceert, was de bedrading relatief eenvoudig. Ik gewoon aangesloten op de 5 V en GND, SDA en SCL lijnen naar de corresponderende poorten op het Leonardo en ik was klaar om te gaan.De software was een beetje moeilijker. Het kostte me al geruime tijd en een heleboel experimenteren om te vinden van de code die ging werken voor wat ik nodig had. Zoals eerder gezegd, zowel de Nunchuck functiebibliotheek (die ik heb opgenomen in dit instructable) en de oorspronkelijke broncode (die ik niet lijken te krijgen om te uploaden correct, dus ik zal gewoon kopiëren en plakken hieronder) werden geschreven door anderen en vervolgens gewijzigd voor mijn doeleinden.
In wezen, wat de code doet is de Nunchuck bibliotheek gebruiken om gegevens uit de ' Chuck elke 10 ms. een reeks voor de muis te verplaatsen, de code gebruikt dit bereik om te bepalen van de rust drempel voor joystick. Nadat de hoofdlus leest de C- en Z knoppen en uitgangen van hen als de linker en rechter muis knoppen, de code dan gaat op om te lezen van de x- en y-as. Na het aftrekken van de center-positiewaarde van de lezing ontvangen, wordt de resulterende absolute waarde vergeleken met de drempel-variabele. Als de waarde kleiner is dan de drempel voor beweging, de afstand verplaatsen is ingesteld op 0, anders is de afstand zet de Lees afstand. Als de x- of y-afstand is niet 0, de muis beweegt de overeenkomstige afstand.
Opgemerkt moet worden dat dit hele proces net zo goed met de versnellingsmeter werken kan. In plaats van met de functies nunchuck_joyx en y, kon men redelijkerwijs gebruik nunchuck_accelx en y. Ik zou niet aanraden, echter. De resultaten bij een poging om de muis te gebruiken kunnen... squirrely.
WiiChuck muis
Brian Krukoski
April 2012
rood-+ 5 wit-gnd, groen-sda, yllw-clck
#include < Wire.h >
#include "nunchuck_funcs.h"
int loop_cnt = 0;
parameters voor het lezen van de joystick:
int bereik = 40; Output bereik van X of Y beweging
int drempel = bereik/10; rust drempel
int centrum = bereik/2; rust positiewaarde
Boole mouseIsActive = false; wel of niet om de muis te besturen
int lastSwitchState = laag; vorige schakelaar staat
VOID Setup {}
initilization voor de Wiichuck
nunchuck_init();
Neem controle van de muis:
Mouse.begin();
Serial.begin(9600);
}
void loop {}
Als (loop_cnt > 10) {/ / elke 10 msec krijgen nieuwe gegevens
loop_cnt = 0;
nunchuck_get_data();
rechts en links klik op besturingselement
int leftState = nunchuck_cbutton();
Als (leftState) Mouse.press(MOUSE_LEFT); anders Mouse.release(MOUSE_LEFT);
int rightState = nunchuck_zbutton();
Als (rightState) Mouse.press(MOUSE_RIGHT); anders Mouse.release(MOUSE_RIGHT);
Lees de x-as
int xReading = nunchuck_joyx(); dringt er bij de nunchuck_funcs bibliotheek voor x as lezing
xReading = kaart (xReading, 38, 232, 0, bereik); 38 en 232 willekeurig bepaald via experimenten, kaarten naar 0 en vooraf ingestelde bereik
int xDistance = xReading - centrum;
Als (abs(xDistance) < drempel) //if absolute waarde van xDistance lager is dan de vooraf gedefinieerde drempel...
{
xDistance = 0;
}
Lees de y-as
int yReading = nunchuck_joyy(); dringt er bij de nunchuck_funcs bibliotheek voor de y-as lezing
yReading = kaart (yReading, 38, 232, 0, bereik); 38 en 232 willekeurig bepaald via experimenten, kaarten naar 0 en vooraf ingestelde bereik
int yDistance = yReading - centrum;
Als (abs(yDistance) < drempel) //if absolute waarde van yDistance lager is dan de vooraf gedefinieerde drempel...
{
yDistance = 0;
}
Beweeg de muis als de lezingen groter dan 0 waren
Als ((xDistance! = 0) || (yDistance! = 0)) {
Mouse.move (xDistance, -yDistance, 0); -yDistance zorgt voor een omgekeerde stijlbedieningshendel
}
}
nunchuck_print_data(); nunchuck gegevens op seriële monitor worden afgedrukt voor de foutopsporing
loop_cnt ++;
delay(1);
}