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

Stap 6: De HID-code toevoegen aan uw bestanden Arduino omgeving

Nu hebt u uw descriptor u toevoegen aan uw omgeving Arduino moet, zodat het kan het programma op uw apparaat. Om dit te doen moet u een aantal bestanden wijzigen. Navigeer naar de documenten/Arduino/hardware/arduino/cores/arduino (Mac) of C:\Program Files (x86) \Arduino\hardware\arduino\cores\arduino (Win) map. Er nemen in reservekopieën van de bestanden HID.cpp en USBAPI.h, voor het geval.

Open HID.cpp in uw favoriete tekst-editor (EditPlus 2 of Notepad ++ zijn goed voor Windows, tekst Wrangler is handig voor Mac) en zoek in de buurt van de bovenkant naar de volgende sectie:

 #if defined(USBCON)#ifdef HID_ENABLED // #define RAWHID_ENABLED // Singletons for mouse and keyboard Mouse_ Mouse; Keyboard_ Keyboard; 

U moet nu een definitie en een singleton-variabele als volgt toevoegen:

 #if defined(USBCON)#ifdef HID_ENABLED// #define RAWHID_ENABLED #define JOYHID_ENABLED// Singletons for mouse and keyboard Mouse_ Mouse; Keyboard_ Keyboard;// And now a joystick object too Joystick_ Joystick; 

Kijk dan verder naar beneden voor de RAWHID-sectie:

 #if RAWHID_ENABLED // RAW HID 0x06, LSB(RAWHID_USAGE_PAGE), MSB(RAWHID_USAGE_PAGE), // 30 0x0A, LSB(RAWHID_USAGE), MSB(RAWHID_USAGE), 0xA1, 0x01, // Collection 0x01 0x85, 0x03, // REPORT_ID (3) 0x75, 0x08, // report size = 8 bits 0x15, 0x00, // logical minimum = 0 0x26, 0xFF, 0x00, // logical maximum = 255 0x95, 64, // report count TX 0x09, 0x01, // usage 0x81, 0x02, // Input (array) 0x95, 64, // report count RX 0x09, 0x02, // usage 0x91, 0x02, // Output (array) 0xC0 // end collection #endif }; 

Nu wijzigen om te wijzigen van de #if aan #ifdef en uw nieuwe HID-descriptor binnen eigen #ifdef sectie invoegen

 #ifdef RAWHID_ENABLED// RAW HID 0x06, LSB(RAWHID_USAGE_PAGE), MSB(RAWHID_USAGE_PAGE), // 30 0x0A, LSB(RAWHID_USAGE), MSB(RAWHID_USAGE), 0xA1, 0x01, // Collection 0x01 0x85, 0x03, // REPORT_ID (3) 0x75, 0x08, // report size = 8 bits 0x15, 0x00, // logical minimum = 0 0x26, 0xFF, 0x00, // logical maximum = 255 0x95, 64, // report count TX 0x09, 0x01, // usage 0x81, 0x02, // Input (array) 0x95, 64, // report count RX 0x09, 0x02, // usage 0x91, 0x02, // Output (array) 0xC0 // end collection #endif// *** Here is where the RAW_HID has been converted to a Game Pad device // *** Inspired by helmpcb.com/electronics/usb-joystick // *** Check out www.usb.org/developers/hidpage/ for more than you'll ever need to know about USB HID // *** HID descriptor created using the HID descriptor tool from www.usb.org/developers/hidpage/dt2_4.zip#ifdef JOYHID_ENABLED 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) // 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) // 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#endif }; 

Nu is gedaan, moeten we enkele code toevoegen om te ontvangen van de gegevens van onze schets die we eerder hebt gemaakt en het rapport verzenden. Zoek verder naar beneden voor de volgende code:

 //=============================================================================//============================================================================= // Mouse Mouse_::Mouse_(void) : _buttons(0) { } 

Direct boven dit toevoegen een nieuw stuk van code kan omgaan met de gegevens als volgt

 //=============================================================================//============================================================================= // Joystick // Usage: Joystick.move(inputs go here) // // The report data format must match the one defined in the descriptor exactly // or it either won't work, or the pc will make a mess of unpacking the data //Joystick_::Joystick_() { }#define joyBytes 4 // should be equivalent to sizeof(JoyState_t)void Joystick_::setState(JoyState_t *joySt) { uint8_t data[joyBytes]; data[0] = joySt->buttons & 0xFF; data[1] = joySt->hatSw1; data[2] = joySt->left_x; data[3] = joySt->left_y; //HID_SendReport(Report number, array of values in same order as HID descriptor, length) // The joystick is specified as using report 3 in the descriptor. That's where the "3" comes from HID_SendReport(3, data, joyBytes); } 

Hier definiëren we het aantal bytes dat wordt verzonden. In dit geval 2-1 byte voor de knoppen en 1 byte voor de hoed, inclusief opvulling. Dan hebben we de eenvoudige functie te aanvaarden van de gegevens die worden verzonden vanaf de schets, hak hem omhoog en dan spuug het uit met de HID_SendReport functie. Dit men is zeer eenvoudig, maar vindt u ingewikkelder is dan degenen elders. Deze site heeft een goed voorbeeld van een 8-as, de 32-knop, de 1 hoed setup. Dit sociaal assistente mij alot maar was veel te ingewikkeld voor wat ik wilde dus ik vereenvoudigd het zo veel als ik kon.

Zodra u hebt alles gedaan wat, sla het bestand op en open USBAPI.h. In dit bestand zullen we een struct en klasse voor de joystick-object maken. Zoek de volgende code:

 //==========================================================================//========================================================================== // Mouse #define MOUSE_LEFT 1 #define MOUSE_RIGHT 2 

Als voorheen, voeg deze code direct boven dit

 //=============================================================================//============================================================================= // Joystick // Implemented in HID.cpp // The list of parameters here needs to match the implementation in HID.cpptypedef struct JoyState // Pretty self explanitory. Simple state to store all the joystick parameters { uint8_t buttons; uint8_t hatSw1; int8_t left_x; int8_t left_y; } JoyState_t;class Joystick_ { public: Joystick_(); void setState(JoyState_t *joySt);}; extern Joystick_ Joystick; 

Sla het bestand op en je bent klaar. Nogmaals, hebt u meer een veeleisende toepassing programmacode toe te voegen om de extra hardware. De hierboven genoemde site zal weer nuttig zijn.

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