Knoppen toevoegen aan uw X52-Pro-joystick met een Arduino Micro (5 / 12 stap)

Stap 5: Maak de HID-descriptor voor uw nieuwe apparaat

Nu heb je de instellingen van uw prototype die u beginnen kunt met het zetten van je Arduino in een HID-compatibel apparaatgetest. De Arduino omgeving is al ingesteld om te kunnen functioneren als een toetsenbord en een muis, maar wij moeten toevoegen een ander type van apparaat in de mix.

De HID-specificaties zijn ontworpen om iedereen te maken van een apparaat uit USB-geheugenklasse of toepassing zonder de noodzaak om het maken van aangepaste drivers. Dit is erg handig, maar betekent wel dat de specificatie vrij complex, is zoals zij wil alle dingen zijn aan alle mensen. In wezen u het type apparaat dat u samenstelt - toetsenbord, Joystick, muis, Gamepad, stuurwiel, enz - en geef vervolgens een of meer collecties van de ingangen van verschillende typen. Deze instellingen en het type en de grootte van de invoergegevens worden aangeduid met een lange reeks van geheimzinnige codes en maak niet gemakkelijk te lezen. Gelukkig zijn de meeste descriptoren die ik heb gevonden zwemmen met platte-tekst commentaar waardoor het leven een beetje makkelijker. Er zijn ook een paar goede gidsen en gebruik tabellen op het web. Ze zijn een beetje droog, maar ze zullen helpen u om te vinden wat je nodig hebt. Hier zijn een paar vond ik handig:

HID Tutorial: http://developer.mbed.org/media/uploads/wim/hid_usb_intro_an249.pdf

HID tabel gebruik: http://www.freebsddiary.org/APC/usb_hid_usages.php

Ook vindt u meer gedetailleerde info en een (vrij onhandig) HID descriptor tool op http://www.usb.org/developers/hidpage#HID Descriptor-hulpprogramma

Hier is de HID "descriptor" die ik gebruik voor mijn setup:

 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x05, // USAGE (Game Pad) 0xa1, 0x01, // COLLECTION (Application) 0x85, 0x03, // REPORT_ID (3) (This is important when HID_SendReport() is called) 0xA1, 0x00, // COLLECTION (Physical) // 8 buttons 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x29, 0x08, // USAGE_MAXIMUM (Button 8) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x95, 0x08, // REPORT_COUNT (8) 0x75, 0x01, // REPORT_SIZE (1) 0x81, 0x02, // INPUT (Data,Var,Abs) <br> // 1 Hat Switch 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x39, // USAGE (Hat switch) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x07, // LOGICAL_MAXIMUM (7) 0x35, 0x00, // PHYSICAL_MINIMUM (0) 0x46, 0x3B, 0x01, // PHYSICAL_MAXIMUM (315) 0x65, 0x14, // UNIT (Eng Rot:Angular Pos) 0x75, 0x04, // REPORT_SIZE (4) 0x95, 0x01, // REPORT_COUNT (1) 0x81, 0x02, // INPUT (Data,Var,Abs) <br> // Padding (4 bytes) 0x75, 0x04, // REPORT_SIZE (4) 0x95, 0x01, // REPORT_COUNT (1) 0x81, 0x03, // INPUT (Cnst,Var,Abs) // 1 D-pads - Dummy so Elite:Dangerous recognises it 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x30, // USAGE (X) 0x09, 0x31, // USAGE (Y) 0x15, 0x81, // LOGICAL_MINIMUM (-127) 0x25, 0x7f, // LOGICAL_MAXIMUM (127) 0x75, 0x08, // REPORT_SIZE (8) 0x95, 0x02, // REPORT_COUNT (2) 0x81, 0x02, // INPUT (Data,Var,Abs) 0xC0, //END COLLECTION 0xC0, //END COLLECTION 

Om hier te komen ik keek over de USAGE_PAGE en gebruik specificaties en besloot dat Game Pad de beste omschrijving om te gebruiken is als een Joystick technisch ten minste 2 analoge assen plus ten minste twee knoppen heeft. De gamepad kunt laten analoge X / Y of een digitale 4-wegschakelaar plus ten minste twee knoppen, dus ik mijn extensie in deze categorie passen kon. Na dat we een collectie voor de toepassing opgeven en geef het een verslag-ID. Dit helpt ons de gegevens later te herkennen.

Nu geven we een fysieke collectie. Dit houdt onze knoppen. U kunt collecties, geneste of side-by-side, maar ik heb niet het gevoel de noodzaak. Binnen de fysieke collectie geeft u nu de ingangen. Om te beginnen met ik de knop gebruik lijstpagina en geef de minimale en maximale waarden, in dit geval 1 en 8, zoals ik heb 8 knoppen. Ik geef vervolgens logische minimum en maximum voor elk van deze knoppen. Zoals ze eenvoudige schakelaars zijn heb ik alleen 1 en 0 voor gedrukt en niet ingedrukt. Ik geef het aantal items in het rapport en het aantal meldingen voor deze pagina gebruik. Tot slot geef ik het invoertype voor deze waarde - gegevens, die is variabel, en bestaat uit absolute waarden, in plaats van waarden die ten opzichte van de laatste gerapporteerde waarden.

De hat-switch is iets anders. Een hat-switch vereist een waarde tussen 0 en 7, waarmee de richting van de hoed in stappen van 45 graden - 0 = omhoog, 1 = omhoog/naar rechts, 2 = gelijk, 3 = omlaag/naar rechts enz. Dit betekent dat we de logische min/max als 0 en 7 en de fysieke min/max als 0 en 315 opgeeft. We hoeven niet te gaan om het even welk verder als 360 graden is gelijk aan 0 graden. Wij geeft u ook de eenheid als een hoekige rotatie-positie. 0-7 kunnen worden ondergebracht in vier stukjes is ditmaal de grootte van het verslag 4.

Zo, 8 knoppen en een hoed, we zijn klaar? Niet helemaal. U wilt een geheel aantal bytes voor elk rapport overbrengen met de USB-host, dus moeten we enkele opvulling toevoegen. Je kan dit doen door toevoeging van een andere phantom hoed die nooit wordt gebruikt, maar het is gewoon toevoegen van een ander verslag van 4 bits en instellen van het invoertype aan constante schoner. Zodra dit gebeurd kunt u afsluiten van zowel de fysieke en application-collecties en je bent klaar.

Helaas, terwijl Windows het apparaat prima erkent vindt u dat enkele games die zullen niet zoals ze verwachten te vinden een X / Y-as dus zoals je kunt zien uit het bovenstaande bestand dat ik heb toegevoegd dummy X / Y-as. Deze worden weergegeven in de gegevens overgedragen, maar als we nooit de waarden van 0 veranderen dan de dummy stick zal nooit lijken te bewegen.

Gerelateerde Artikelen

Knoppen toevoegen aan uw muis

Knoppen toevoegen aan uw muis

Ik heb spelen FPS games op mijn PC voor een tijdje nu, en ik vond mezelf vaak behoefte aan meer knoppen op mijn muis. Dat is waarom ik kocht in één keer een Logitech G9, maar in sommige spellen zelfs die de knoppen op het extra 4 die leek te zijn paa
Tekst als watermerk toevoegen aan uw YouTube-video's met AVS Video Editor 7.1

Tekst als watermerk toevoegen aan uw YouTube-video's met AVS Video Editor 7.1

Tekst als watermerk toevoegen aan uw YouTube-video's met AVS Video Editor 7.1
Met behulp van een joystick met je Arduino

Met behulp van een joystick met je Arduino

Joysticks zijn een grote bron van input voor een project. Vooral voor Robotica. Als hardware hackers hebben de meesten van ons hield altijd dit soort dingen. Behalve de nieuwe jongens daartoe vindt het misschien moeilijk te begrijpen van het concept
Controle LED's met een Arduino van een C# programma

Controle LED's met een Arduino van een C# programma

heb je ooit wilde om te controleren enkele LED's met je Arduino vanuit een programma dat u hebt geschreven? Nou ben ik hier om u te helpen met dat.. Dit is mijn eerste ' kunnen dus please help me uit als ik langs de weg omhoog knoeien. En voel je vri
ZAPpelin, of hoe om te trainen uw luchtballon met een Arduino en IR afstandsbediening

ZAPpelin, of hoe om te trainen uw luchtballon met een Arduino en IR afstandsbediening

Is het vliegen van seal? Een fladderende vreemdeling?Nee het is een ZAPpelin, een Arduino gecontroleerde indoor blimp, setup om te leren in de signalen van een externe IR naar commando.Dit project kwam tot leven op de derde Arduino Jam Februari 15e t
Hoe te meten van de temperatuur zeer nauwkeurig met een Arduino en een TSYS01 Temperatuur Sensor Board.

Hoe te meten van de temperatuur zeer nauwkeurig met een Arduino en een TSYS01 Temperatuur Sensor Board.

Tijdens zijn studie in de Universiteit werden we uitgedaagd als onderdeel van een cursus werken in het ontwerpen van een doos met zeer nauwkeurige temperatuurregeling. Mocht het project te doen slagen, moesten meerdere vakken worden gebouwd en gebrui
ARD-e: de robot met een Arduino als een brein

ARD-e: de robot met een Arduino als een brein

het maken van een opensource gecontroleerd Arduino robot voor onder $100.Hopelijk na het lezen van dit instructable u zal zitten kundig Neem uw eerste stap in de robotica. ARD-e kost ongeveer 90 dollar tot $130 afhankelijk van hoeveel vrije elektroni
Beheersing van een MIDI-CC in Ableton Live met een Arduino Uno

Beheersing van een MIDI-CC in Ableton Live met een Arduino Uno

In dit instructable zullen we gebruiken een potentiometer op een Arduino Uno om controle van een MIDI-CC in Ableton Live. Een MIDI CC staat voor continue Controller, dat wil zeggen een getal in het bereik van 0 tot 127 inclusieve te moduleren iets me
Controle van een Camera met een Arduino en RS232 Shield

Controle van een Camera met een Arduino en RS232 Shield

Dit leerprogramma zal u tonen hoe u kunt controleren vele verschillende aspecten van de werking van een camera's met een Arduino. Deze bewerking kan worden de pan en tilt camera, zoom en focus van de lens, en RGB kenmerken. De Arduino zal gebruik mak
Beheersing van een RC Servo motor met een Arduino en twee pulsschakelaars

Beheersing van een RC Servo motor met een Arduino en twee pulsschakelaars

de naam zegt het al. Beheersing van een RC auto servomotor met een Arduino en sommige weerstanden, jumper draden en twee tactiele schakelaars. Ik maakte dit de tweede dag kreeg ik mijn Arduino, dus ik erg trots op mezelf ben.Stap 1: Onderdelenlijst O
Programmering Arduino met een Arduino

Programmering Arduino met een Arduino

Dit is mijn eerste Instructable. In dit Instructable ga ik u tonen hoe te programmeren van een Arduino met een Arduino. Er zijn geen stuurprogramma's nodig! Dit Instructable is ook handig voor het uploaden van schetsen aan de Chinese ArduinoStap 1: D
Beheersing van een stappenmotor met een Arduino

Beheersing van een stappenmotor met een Arduino

Dit leerprogramma zal u tonen hoe te bedienen van een stappenmotor die werd gered van een oude printer met een Arduino.Stap 1: Wat is een Stepper Motor? Een stappenmotor bestaat uit twee delen, een rotor en een stator. De rotor is het deel van de mot
Lage hoogte milieubewaking met een Arduino gebaseerd weer Instrument en Remote Sensing Platform van Aeropod

Lage hoogte milieubewaking met een Arduino gebaseerd weer Instrument en Remote Sensing Platform van Aeropod

ProjectoverzichtStudenten op New Lothrop High School in Michigan hebben samengewerkt om te bouwen van een lage hoogte remote sensing platform genaamd een "Aeropod" en het uitgerust met een "Arduino" gebaseerd weer instrument om sfeervo
Controle van EL draad met een Arduino

Controle van EL draad met een Arduino

In dit instructable ik zal u tonen hoe u kunt besturen van EL draad met een Arduino.Wat u zult moeten:EL Wire en omvormer - adviseer ik http://ez-el.com/ez-el-wire/10ft-ez-el-wire-3v-inverter-kit/Arduino of een micro-controller die een relay kunt bep