Étape 7: Développez vos croquis pour envoyer les données
Maintenant, votre environnement est configuré, vous pouvez ajouter le code à votre script de test à faire utiliser le descripteur HID.
Prenez une copie de votre script de test et modifiez-la comme suit. Tout d’abord, en haut du script que vous devrez ajouter une variable devant contenir l’état de la manette et l’autre pour suivre le commutateur de chapeau
// 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;
Ensuite, ajoutez une ligne au bas de la fonction setup() pour définir l’état initial :
joySt.buttons = 0; // Set the initial state of the buttons
Dans cet exemple les 8 premiers boutons sont des boutons simples si nous pouvons compter simplement par le biais de tous les boutons, moins le dernier carré pour la hat. et ensemble ou désactivez le bit approprié sur 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 { ...
Nous traitons les quatre derniers boutons comme un commutateur de chapeau. Il y a deux façons de traiter un commutateur de chapeau. Vous pouvez la traiter comme un simple chapeau 4 directions (Nord, est, Sud, Ouest), ou vous pouvez aller chercher un chapeau 8 directions (N, NE, E, SE, S, SW, W, NW). Un chapeau de 4 voies est assez simple à gérer, donc je vais vous montrer la version 8 voies ici. La fonctionnalité de 8 voies signifie que vous devez gérer plus d’un bouton pressé donc vous ne pouvez pas définir les choses que vous avancez comme pour les boutons. Ainsi, après le code précédent, pour les quatre derniers boutons vous devrait enregistrer l’état de chacune d’elles dans la variable que nous avons créé précédemment. J’utilise un masque de bits pour rendre les choses plus simples que nous pouvons lire juste la valeur entière par la suite pour obtenir la « direction » du chapeau.
} 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); } }
Maintenant, nous savons qui, du chapeau boutons sont pressés, nous pouvons lire la valeur de la variable hatButtons et passez la valeur correcte à l’objet de 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 }
Maintenant, tout ce qui reste à faire est de sortir de l’état actuel pour mettre à jour l’ordinateur
// Call Joystick.setState and send the data to the computerJoystick.setState(&joySt);
J’ai joint le code de cet exemple à cette étape pour enregistrer vos doigts.