Paso 7: Ampliar el esbozo para enviar los datos
Ahora su entorno está configurado puede Agregar el código para el script de prueba para hacer uso del descriptor HID.
Tomar una copia del script de prueba y modifíquela como sigue. En primer lugar, en la parte superior de la secuencia de comandos que necesita añadir una variable que contenga el estado de la palanca de mando y otro para mantener el interruptor
// Create a variable to hold the entire state of the device to pass over USB to the HID driverJoyState_t joySt; // A variable to help us manage the 4 hat buttons to make an 8-way hat if we want byte hatButtons;
Luego agregar una línea en la parte inferior de la función setup() para establecer el estado inicial:
joySt.buttons = 0; // Set the initial state of the buttons
En este ejemplo los 8 primeros botones son simples botones así que simplemente podemos contar a través de todos los botones, menos los últimos cuatro para sombrero. y del sistema o borrar el bit apropiado en la variable joySt.buttons.
if (i < (switchCount - 4)) { // We're looking at all but the last 4 pins as simple buttons in this section // if the button state has changed and it's currently pressed if ((buttonState != buttonLastState[i]) && (buttonState == LOW)) { // Set the button bit joySt.buttons = bitSet(joySt.buttons, i); } // if the button state has changed and it's currently released if ((buttonState != buttonLastState[i]) && (buttonState == HIGH)) { // Unset the buttonbit joySt.buttons = bitClear(joySt.buttons, i); } // save the current button state for comparison next time: buttonLastState[i] = buttonState;} else { ...
Estamos tratando los últimos cuatro botones como un interruptor. Hay un par de maneras de manejar un interruptor. Usted puede tratar como un simple sombrero de 4 direcciones (norte, este, sur, oeste), o usted puede ir para un sombrerete de 8 (N, NE, E, SE, S, SW, W, NW). Un sombrero de 4 vías es bastante sencillo de manejar por lo que te voy a mostrar aquí la versión de 8-way. La funcionalidad de 8-way significa que usted necesita manejar más de un botón se presiona para que no se pueden establecer cosas como recorrer con los botones. Por lo tanto, a continuación el código anterior, para los últimos cuatro botones debe registrar el estado de cada uno en la variable que creamos anteriormente. Estoy usando una máscara de bits para hacer las cosas más simples como solo podemos leer el valor de entero luego para conseguir la 'dirección' del sombrero.
} else { // We're now looking at the remaining four buttons as hat switches in this section // Using a bit-mask, set the bit that corresponds to each button so we can // determine the state of all four buttons in one go later on if (buttonState == LOW) { // Set the bit if the button is pressed bitSet(hatButtons, i - 8); } else { // Clear the bit if the button is NOT pressed bitClear(hatButtons, i - 8); } }
Ahora sabemos que el sombrero se oprimen los botones podemos leer el valor de la variable hatButtons y pase el valor correcto para el objeto joySt:
// Determine value for hatSw1 according to the buttons that are pressed// This uses the last four bits in the byte so we just need to check the value of // the byte and set the joySt.hatSw1 value if we have a single button pressed or // a valid pair of buttons pressed. Below i've shown what's pressed using UPPER // case and what's not pressed using lower case. i.e. ULdr = UP and LEFT pressed // Key: UP = bit 1, LEFT = bit 2, DOWN = bit 3, RIGHT = bit 4 switch (hatButtons) { case 0: joySt.hatSw1 = 8; break; // uldr : center : hatButtons = B00000000 case 1: joySt.hatSw1 = 0; break; // Uldr : 0 : hatButtons = B00000001 case 3: joySt.hatSw1 = 1; break; // ULdr : 45 : hatButtons = B00000011 case 2: joySt.hatSw1 = 2; break; // uLdr : 90 : hatButtons = B00000010 case 6: joySt.hatSw1 = 3; break; // uLDr : 135 : hatButtons = B00000110 case 4: joySt.hatSw1 = 4; break; // ulDr : 180 : hatButtons = B00000100 case 12: joySt.hatSw1 = 5; break; // ulDR : 225 : hatButtons = B00001100 case 8: joySt.hatSw1 = 6; break; // uldR : 270 : hatButtons = B00001000 case 9: joySt.hatSw1 = 7; break; // UldR : 315 : hatButtons = B00001001 }
Ahora todo lo que queda por hacer es el estado actual para actualizar el equipo de salida
// Call Joystick.setState and send the data to the computerJoystick.setState(&joySt);
Yo he conectado el código para este ejemplo este paso para guardar los dedos.