Lägga till knappar i din X52-Pro Joystick med en Arduino mikro (7 / 12 steg)
Steg 7: Utöka din skiss för att skicka data
Nu miljön är rätt konfigurerad kan du lägga till koden till din testskript göra använda av HID deskriptor.
Ta en kopia av din testskript och ändra den följande. Först på toppen av skriptet måste du lägga till en variabel för att hålla styrspaken och en annan för att hålla reda på riktningsknapp
Skapa en variabel för att hålla hela staten av enheten för att passera över USB till HID driverJoyState_t joySt;
En variabel för att hjälpa oss att hantera knapparna 4 hatt för att göra en 8-vägs hat om vi vill
byte hatButtons;
Lägg sedan till en linje längst ned i den setup() funktionen att ange starttillståndet:
joySt.buttons = 0; Ange starttillståndet för knapparna
I det här exemplet de första 8 finns bara enkla knappar så kan vi helt enkelt räkna igenom alla knappar, mindre de senaste fyrana i hatt., och ange eller rensa lämplig bit med variabeln joySt.buttons.
om (jag < (switchCount - 4)) {
Vi tittar på alla men de sista 4 stift som enkla knappar i detta avsnitt
Om knappen staten har ändrats och det trycks för närvarande
om ((buttonState! = buttonLastState[i]) & & (buttonState == låg)) {
Ställa in knappen lite
joySt.buttons = bitSet(joySt.buttons, i);
}
Om knappen staten har ändrats och det släpps för närvarande
om ((buttonState! = buttonLastState[i]) & & (buttonState == hög)) {
Inaktivera buttonbit
joySt.buttons = bitClear(joySt.buttons, i);
}
spara den aktuella knapp staten för jämförelse nästa gång:
buttonLastState [i] = buttonState;
} annat {
...
Som en riktningsknapp behandlar vi de sista fyra knapparna. Det finns ett par sätt att hantera en riktningsknapp. Du kan behandla det som en enkel 4-vägs hatt (Nord, öst, syd, väst), eller du kan gå för en 8-vägs hat (N, NE, E, SE, S, SW, W, NW). En 4-vägs hat är ganska enkel att hantera så ska jag visa dig den 8-vägs versionen här. 8-vägs funktionen innebär att du behöver för att hantera mer än en knapp pressas så du inte kan ange saker när du går längs med knappar. Så, efter föregående kod, för de sista fyra knapparna du bör registrera tillståndet för var och en i den variabel som vi skapade tidigare. Jag använder en bitmask för att göra saker enklare som vi bara kan läsa heltalsvärdet efteråt för att få "ledning" av hatten.
} annat {
Vi tittar nu på de återstående fyra knapparna som hat växlar i detta avsnitt
Med en bit-mask, satt lite som motsvarar till varje knapp så vi kan
avgöra tillstånd för alla fyra knappar på en gång senare på
om (buttonState == låg) {
Ställa in lite om knappen trycks
bitSet (hatButtons, i - 8);
} annat {
Rensa lite om knappen inte är intryckt
bitClear (hatButtons, i - 8);
}
}
Nu vet vi vilken av hatten trycker på knapparna vi kan läsa värdet för variabeln hatButtons och passera rätt värde till objektet joySt:
Fastställa värdet för hatSw1 enligt de knappar som trycks
Detta använder de sista fyra bitarna i byten så vi behöver bara kontrollera värdet av
byte och uppsättning av joySt.hatSw1 värde om vi har en enda knapp intryckt eller
ett giltigt par knappar tryckte. Nedan har jag visat vad trycks med övre
fallet och vad är inte intryckt med gemener. dvs. ULdr = upp och lämnade tryckte
Nyckel: Upp = bit 1, vänster = bit 2, ned = bit 3, höger = bit 4
växel (hatButtons) {
fall 0: joySt.hatSw1 = 8; bryta; uldr: centrera: hatButtons = B00000000
fall 1: joySt.hatSw1 = 0; bryta; Uldr: 0: hatButtons = B00000001
fall 3: joySt.hatSw1 = 1; bryta; ULdr: 45: hatButtons = B00000011
fall 2: joySt.hatSw1 = 2; bryta; uLdr: 90: hatButtons = B00000010
mål 6: joySt.hatSw1 = 3; bryta; uLDr: 135: hatButtons = B00000110
fall 4: joySt.hatSw1 = 4; bryta; ulDr: 180: hatButtons = B00000100
ärende 12: joySt.hatSw1 = 5; bryta; ulDR: 225: hatButtons = B00001100
mål 8: joySt.hatSw1 = 6; bryta; uldR: 270: hatButtons = B00001000
mål 9: joySt.hatSw1 = 7. bryta; UldR: 315: hatButtons = B00001001
}
Nu återstår att göra är att mata det aktuella läget för att uppdatera datorn
Ring Joystick.setState och skicka data till datorn
Joystick.setState(&joySt);
Jag har bifogat koden för detta exempel att detta steg för att spara dina fingrar.