Hjälten i vår berättelse är återigen Wii Nunchuk-kontrollen. Så snart programmeraren Tod E. Kurt skrev ett bibliotek för Arduino, så att du kan arbeta med honom, började vänner komma med en mängd olika applikationer för honom. Antingen kontrolleras den magiska skärmen leksaken, eller den virtuella helikoptern i spelet för MSX ... Tja, författaren av Instructables under smeknamnet Kriegwesen räknade ut hur man använder en sådan kontroller som en vanlig datormus med ett USB-gränssnitt. Det är som en trackball - ingen matta behövs. Nej, det här är bättre än en trackball - du behöver inte heller ett bord.
Vanligtvis används improviserade kontakter för att ansluta Arduino till Nunchuk. Befälhavaren bestämmer sig för att klara sig utan att öppna fallet och placera någon väldigt liten klon av Arduino där. Men han har inte en skruvmejsel med en brodd i en triangulär sektion. Befälhavaren beställer det, men det tar för lång tid att vänta. Ingenting, användbart för andra projekt. Här öppnar han kabeln och drar ut fyra ledare från den:
för hemlagad alla Arduino-kompatibla kort som kan emulera USB HID-enheter, samt att ha stift speciellt dedikerade för SDA- och SCL-linjer i gränssnitt I, är lämpliga2C. Arduino Leonardo-styrelsen passar båda kriterierna. Ledarna i Nunchuk-kabeln har vanligtvis följande färgkodning: vit - vanlig, röd - plus effekt (applicera korrekt 3,3 V, men från recensioner, och från 5 V misslyckas ingenting), grön - SDA, gul - SCL . Men det händer också att färgerna är icke-standard, så det är bättre att ta den kabeln som efter snacking som återstår med anslutningen och ringen enligt dess pinout.
Genom att kombinera allt som beskrivits ovan skriver mästaren en skiss:
// Wiichuck Mouse
// Brian Krukoski
// april 2012
// röd- + 5, vit-gnd, grön-sda, yllw-clck
#include
# inkludera "nunchuck_funcs.h"
int loop_cnt = 0;
// parametrar för att läsa joysticken:
int-intervall = 40; // utgångsintervall för X- eller Y-rörelse
int tröskel = intervall / 10; // vilotröskel
int center = intervall / 2; // värd för viloposition
boolean mouseIsActive = falsk; // huruvida man ska kontrollera musen eller inte
int lastSwitchState = LÅG; // föregående växlingstillstånd
ogiltig installation () {
// initilisering för Wiichuck
nunchuck_init ();
// ta kontroll över musen:
Mouse.begin ();
Serial.begin (9600);
}
void loop () {
om (loop_cnt> 10) {// var 10: e msek får ny data
loop_cnt = 0;
nunchuck_get_data ();
// höger- och vänsterklickkontroll
int leftState = nunchuck_cbutton ();
if (leftState) Mouse.press (MOUSE_LEFT); annars Mouse.release (MOUSE_LEFT);
int rightState = nunchuck_zbutton ();
if (högerstatus) Mouse.press (MOUSE_RIGHT); annars Mouse.release (MOUSE_RIGHT);
// läs x-axeln
int xReading = nunchuck_joyx (); // kräver nunchuck_funcs-bibliotek för x-axelavläsning
xReading = karta (xReading, 38, 232, 0, intervall); // 38 och 232 godtyckligt bestämda genom experiment, kartor till 0 och förinställt intervall
int xDistance = xLäsning - center;
om (abs (xDistance)
Programmet behöver en rubrikfil som anges här. När du har laddat ner den byter du den till nunchuck_funcs.h
Befälhavaren lägger allt järn i en låda som ser ut som en lödbox och fixerar kablarna inuti Sugru. Du kan ta en riktig kopplingsbox och fixa kablarna på ett annat sätt.
I den nuvarande versionen av firmware fungerar allt stabilt, men rullningsfunktionen är inte implementerad. I framtiden planerar befälhavaren att se till att när en av knapparna trycks in, rullning sker enligt signaler från Nunchuk accelerometer.