Bonjour à tous,
Cela fait maintenant plusieurs jours que je me bas avec mon code que j’essaie désespérément de faire fonctionner avec mon Arduino.
Je dois contrôler 8 servos avec une manette PS2. Pour cela j'ai écris des fonctions que j'appelle avec les différents boutons que je presse sur le controller. Jusque ici tout va bien, toutes les fonctions appeler fonctionnent.
là ou ça se corse c'est lorsque j'essaie d'activer une fonction à l'aide des deux joysticks analogiques. En effet actuellement, lorsque je baisse le joystick LX alors le servo correspondant va suivre l'évolution des valeurs du Pot LX et donc bouger en fonction des données du POT (ce qui, pour la plupart des utilisateurs est parfait).
Ce que je souhaiterais réaliser c'est SEULEMENT lorsque le joystick est arrivé en bas, alors une fonction est appelé. Et donc le mouvement pour aller de la position neutre à la position basse n'agit pas sur le servo. Mais etant donné que le joystick en position basse n'aura jamais une valeur unique mais plutôt plusieurs en fonction de si mon doigts le pousse un peu plus à gauche ou à droite, je dois donc réfléchir à une fourchette de valeur entre la position basse X et la position basse Y. Et c'est seulement lorsque le joystick se trouvera dans cette fourchette de valeur que la fonction sera appelé.
Je n'ai aucune idée de comment réaliser cela :s
J'arrive sans soucis à appeler des fonctions avec les autres boutons de la manette, j'arrive aussi à faire bouger mes servos avec les joysticks mais je n'arrive pas à faire ce que je viens de décrire au dessus. Quelqu'un aurait-il une idée?
Par avance merci!!
//Analogue Stick readings
ForwardVal = ps2x.Analog(PSS_RY);
YawLeftVal = ps2x.Analog(PSS_RX);
UpVal = ps2x.Analog(PSS_LY);
RollLeftVal = ps2x.Analog(PSS_LX);
//Translate the Stick readings to servo instructions
//This would normally happen in the ROV based on the
//Stick readings sent to it from the topside Arduino
//Over the serial.
//Readings from PS2 Controller Sticks are from 0 to 255
//with the neutral being 128. The zero positions are to
//the left for X-axis movements and up for Y-axis movements.
//Variables to carry the actual raw data for the ESCs
upLraw = (128-UpVal)+(128-RollLeftVal)/2; //This will be up to a value of 192
upRraw = (128-UpVal)-(128-RollLeftVal)/2; //This will be up to a value of 192
HLraw = (128-ForwardVal)+(128-YawLeftVal); //This will be up to a value of 256
HRraw = (128-ForwardVal)-(128-YawLeftVal); //This will be up to a value of 256
//Scale the values to be suitable for ESCs and Servos
upLraw=map(upLraw,-193,193,0,179);
upRraw=map(upRraw,-193,198,0,179);
HLraw=map(HLraw,-256,256,0,179);
HRraw=map(HRraw,-256,256,0,179);
//Write it to the Servos or ESCs
UpLServo.write(upLraw);
UpRServo.write(upRraw);
HorizLServo.write(HLraw);
HorizRServo.write(HRraw);