Añadir botones a tu Joystick X52-Pro con un Arduino Micro (6 / 12 paso)

Paso 6: Agregue el código ocultado a los archivos de entorno de Arduino

Ahora tienes el descriptor que necesita agregar al entorno de Arduino, por lo que se puede programar a su dispositivo. Para hacer esto usted tendrá que modificar un par de archivos. Desplácese al directorio de archivos de C:\Program (x86) \Arduino\hardware\arduino\cores\arduino (Win) o documentos/Arduino/hardware/arduino/corazones/arduino (Mac). En tener copias de seguridad de los archivos HID.cpp y USBAPI.h, por si acaso.

Abrir HID.cpp en su editor de texto favorito (EditPlus 2 o Notepad ++ son buenas para Windows, texto Wrangler es útil para Mac) y buscar en la parte superior la siguiente sección:

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

Ahora necesita añadir una definición y una variable singleton como sigue:

 #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; 

Entonces busque abajo para la sección de Grad:

 #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 }; 

Ahora modificar para cambiar el #if #ifdef e introduzca el descriptor HID nuevo dentro de su propia sección de #ifdef

 #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 }; 

Ahora que ha hecho, necesitamos añadir algún código para recibir los datos de nuestro dibujo que creamos anteriormente y enviar el informe. Busque por el siguiente código:

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

Directamente por encima de esto agregue un nuevo trozo de código para manejar los datos como sigue

 //=============================================================================//============================================================================= // 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); } 

Aquí definimos el número de bytes que se envían. En este caso 2-1 byte para los botones y 1 byte para el sombrero, como relleno. Luego tenemos la función simple para aceptar los datos enviados desde el boceto, picar para arriba y luego escupirla utilizando la función HID_SendReport. Este es muy simple, pero usted puede encontrar que más complicada en otros lugares. Este sitio tiene un buen ejemplo de un eje de 8, 32-botón, configuración 1 sombrero. Esto me ayudó mucho pero era demasiado complicado para lo que quería así que había simplificado tanto como pude.

Una vez hayas hecho todo eso, guarde el archivo y abra USBAPI.h. En este archivo se creará una estructura y clase para el objeto de la palanca de mando. Encontrar el siguiente código:

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

Como antes, insertar este código directamente por encima de este

 //=============================================================================//============================================================================= // 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; 

Guarde el archivo y listo. Una vez más, si tienes más una aplicación exigente simplemente agregar código para controlar el hardware adicional. El sitio antes mencionado será útil nuevamente.

Artículos Relacionados

Programar Arduino Pro Mini usando Arduino Uno

Programar Arduino Pro Mini usando Arduino Uno

Hola a todos. Hoy voy a mostrar como programar arduino pro mini usando arduino uno.Si ya tenías un arduino uno y nuevamente comprar arduino pro mini entonces usted no necesita comprar el convertidor USB a serial para programar el arduino pro mini por
Subir sketch Arduino Pro Mini usando Arduino UNO

Subir sketch Arduino Pro Mini usando Arduino UNO

He comenzado mi camino con el arduino UNO, hacia el mini pro no comprar el adaptador USB, pero el Consejo UNO que sirve para subir mis dibujos.Paso 1: Quitar el Atmel ICMuy cerfuly quitar el IC Atmel de Arduino UNO, las clavijas son muy gentel así qu
Con un joystick con tu Arduino

Con un joystick con tu Arduino

Palancas de mando son una gran fuente de entrada para un proyecto. Especialmente para la robótica. Como los hackers de hardware la mayoría de nosotros siempre ha amado a este tipo de cosas. Excepto los chicos nuevos a esto podrían ser difícil de capt
Subir bocetos a Arduino Mini Pro uso de Arduino UNO (sin quitar el Atmel Chip)

Subir bocetos a Arduino Mini Pro uso de Arduino UNO (sin quitar el Atmel Chip)

Esto describe un procedimiento para hacer uso de USB incorporado de Arduino UNO a Serial(TTL) subir bocetos a tablero de Arduino Mini Pro sin necesidad de quitar la viruta de regulador micro Atmel de UNO. Esto es útil para aquellos empezando con plac
Añadir un pequeño joystick de pulgar de dos ejes analógicos a su palanca de mando existente.

Añadir un pequeño joystick de pulgar de dos ejes analógicos a su palanca de mando existente.

Después compré un Thrustmaster Hotas Flight Stick X para Elite peligroso, quería dos ejes analógicos adicionales para el empuje lateral/vertical.Después de algunos googleando, me encontré esta entrada de blog agradable: convertir un Arduino Leonardo
Añadir botones en el ratón

Añadir botones en el ratón

He estado jugando FPS juegos en mi PC por un tiempo ahora y me encontrado con frecuencia necesidad de más botones en mi ratón. Es al mismo tiempo compré un Logitech G9, pero en algunos juegos incluso que los botones que los extra 4 parecen ser pocos.
Pimp tu viejo Mac Pro con una unidad de fusión

Pimp tu viejo Mac Pro con una unidad de fusión

yo soy usuario de Mac mucho tiempo. En 2008 compraron un Mac Pro y he usado y amado durante mucho tiempo. Para citar a un buen amigo mío, se está haciendo bastante largo en el diente. Como apple no ha lanzado un nuevo en un tiempo y no hay diferencia
Ver instructivo como usuario pro con características adicionales (todas las medidas en una página + guardar).

Ver instructivo como usuario pro con características adicionales (todas las medidas en una página + guardar).

Este es mi primer instructable. Si tienes alguna sugerencia, por favor me avisan. Esperamos que disfrute de esto. Has pensado de ver todos los pasos de un instructivo en una sola página y guardarlo. Aquí es una técnica para conseguirlo con algunas ca
Añadir Bluetooth a una pantalla de LCD con entrada serial

Añadir Bluetooth a una pantalla de LCD con entrada serial

Pantallas de LCD con entrada serial pueden actualizarse a Bluetooth mediante un puerto de serie Bluetooth JY-MCU. Una buena razón para hacer esto es por lo que la pantalla se puede utilizar con un teléfono Android o tablet. Una sencilla aplicación An
Cómo hacer botones de capa de Jack Sparrow con la resina.

Cómo hacer botones de capa de Jack Sparrow con la resina.

Materiales utilizados:Piezas de madera y tacoLadrillos de LEGOSuper sculpeyResina de epoxy,vaselinaCaucho de silicónAlambre de cobre (2mm),Yeso de París,Escritores de oro tamaño,Polvo de broncePinturas de acrílicoAlambres finos (para colgar botones)E
Un mecanismo de liberación del paracaídas con un Arduino Mini Pro

Un mecanismo de liberación del paracaídas con un Arduino Mini Pro

este es un mecanismo de liberación del paracaídas para un cohete modelo, he construido para un cohete de agua pero trabajar otros tipos. Utiliza un Arduino mini pro (http://www.sparkfun.com/products/9218) que es realmente bueno para esto ya que pesa
Utilizando el teclado de botones de sparkfun 12, con el arduino

Utilizando el teclado de botones de sparkfun 12, con el arduino

Hola chicos, bien comprado este teclado y no estaba exactamente seguro de cómo cablear, porque los pernos no están en orden!bueno, le daré un esquema y que para arriba y en ningún momento...Paso 1: cableado La imagen lo dice todo...las resistencias p
Cómo configurar 2014 flashcart R4i Gold Pro con kernel V3.4b a trabajar con nintendo firmware V7.1.0 16u

Cómo configurar 2014 flashcart R4i Gold Pro con kernel V3.4b a trabajar con nintendo firmware V7.1.0 16u

recientemente, el núcleo de flashcart R4i Gold Pro 2014 han sido actualizados a V3.4b, por lo que este post pretende mostrar cómo configurar el flashcart R4i Gold Pro 2014 con kernel V3.4b a trabajar con nintendo firmware V7.1.0 16u.Antes de empezar,
Añadir un encendedor Bic a su llavero con un soporte de impresión 3d.

Añadir un encendedor Bic a su llavero con un soporte de impresión 3d.

Este es un truco fácil para su encendedor siempre contigo, en tu llavero.Con un 3d realmente pequeño impreso piezas.Si no cabe causa el titular es demasiado apretado, que usted puede cortar con una sierra de metal para darle un poco de elasticidad.Se