Lire les entrées d’un joystick¶
Le Joystick¶
Pour permettre au pilote de contrôler le robot, celui-ci utilise un joystick. Nous pouvons aussi utiliser une manette de Xbox.
Le joystick que nous utilisons est le Logitech 3D Pro. Il possède 3 axes (avant/arrière, gauche/droite et twist), 12 boutons, un POV (bouton avec 9 positions possibles) et un throttle (manette type avion).
On peut connaître l’état de chaque bouton/axe du joystick en temps réel sur la Driver Station :
Dans le Code¶
WpiLib fournit une classe Joystick qui nous permet de récupérer les infos de celui-ci. Son constructeur attend en argument le numéro du joystick. Les numéros sont attribués selon l’ordre de branchement : le 1er joystick sera le 0, le 2ème le 1, ect … Si on a un seul joystick, il aura donc pour numéro 0 :
#include <frc/Joystick.h>
frc::Joystick mon_joystick(0);
Pour récupérer l’état d’un bouton (appuyé/relâché, on peut utiliser la
méthode bool GetRawButton(int button)
qui attend en argument le numéro
du bouton et qui renvoi true
si le bouton est appuyé et false
si
il est relâché.
// Récupère l'état de la gâchette (trigger)
bool gachetteAppuyee = mon_joystick.GetRawButton(1);
Pour récupérer la position d’un axe entre -1 et 1, on peut utiliser les
méthodes double GetX()
, double GetY()
, double GetZ()
(ou GetTwist()
) et double GetThrottle()
.
// Récupère l'état de chaque axe
double x = mon_joystick.GetX();
double y = mon_joystick.GetY();
double twist = mon_joystick.GetTwist();
double throttle = mon_joystick.GetThrottle();
Note
Pour adoucir les valeurs du joystick, il est possible d’ajouter une deadband : une zone dans laquelle les valeur sont rejetées car trop petites. Pour en apprendre plus sur les deadbands, voici un site trés intéressant.
On a aussi la méthode int GetPOV()
qui renvoi l’angle formé par le POV
ou -1 si il est situé au centre.
int pov = mon_joystick.GetPOV();
switch (pov)
{
case -1:
// Centre
break;
case 0:
// Haut
break;
case 180:
// Bas
break;
case 90
// Droite
break;
case 270
// Gauche
break;
}