Bonjour,j'ai un projet pour contrôler la souris de mon ordinateur avec un joystick (j'utilise arduino Leonardo) et lorsque j'entre mon code dans l'IDE et le téléverse,la souris devient incontrôlable et va vers le bas droit de l'écran systématiquement.
Voici mon code:
#include <Mouse.h>
#define VRX_PIN A0 // Arduino pin connected to VRX pin
#define VRY_PIN A1 // Arduino pin connected to VRY pin
int xValue = 0; // To store value of the X axis
int yValue = 0; // To store value of the Y axis
void setup() {
Serial.begin(9600) ;
}
void loop() {
Mouse.begin();
xValue = analogRead(VRX_PIN);
yValue = analogRead(VRY_PIN);
if(xValue>1023){
Mouse.move(10,0,0);
}
if(yValue>100){
Mouse.move(0,10,0);
}
la broche analogique ne retournera la valeur 1023 que si le joystick est a fond a droite. et pas plus car le convertisseur analogique vers digital d'une carte leonardo ne vas que de 0 a 1023.
et dans la boucle
la souris n'ira que vers le bas car le millieu du joystick est au alentours de 511.
D'accord,merci pour vos conseils,j'ai fait un nouveau code maiscela me fait toujours la même chose:
#include <Mouse.h>
#define VRX_PIN A0 // Arduino pin connected to VRX pin
#define VRY_PIN A1 // Arduino pin connected to VRY pin
int xValue = 0; // To store value of the X axis
int yValue = 0; // To store value of the Y axis
void setup() {
Serial.begin(9600) ;
}
void loop() {
Mouse.begin();
xValue = analogRead(VRX_PIN);
yValue = analogRead(VRY_PIN);
if(xValue>530){
Mouse.move(10,0,0);
}
if(yValue>530){
Mouse.move(0,10,0);
}
}
pour le fait que la carte prend le contrôle total de la souris c'est du au fait que la carte envoie des informations de mouvement de la souris près de 16000 milliards fois par seconde donc le pc ne s'occupe que des informations de la carte.
Oui,ce n'est pas un problème (je ne compte pas utiliser la souris pendant l'utilisation du joystick) mais comment contrôler la souris avec le joystick de manière contrôlée ?
Il faut que tu affiches les valeurs renvoyées par le joystick lorsqu'il est au repos : tu verras dans quelle gamme de valeurs tu dois tester. Par exemple, il est possible que le joystick au repos renvoie des valeurs entre 500 et 530. Dans ce cas, tu dois adapter ton test.
Profites-en pour afficher les valeurs renvoyées lorsque tu déplaces ton joystick, dans chaque direction : ça ter permettra d'encore mieux écrire tes tests.
Si par exemple les valeurs renvoyées lorsque le joystick est en haut à gauche sont entre 0 et 50, tu sais écrire ton test pur aller en haut à gauche.
#include <Mouse.h>
#define VRX_PIN A0 // Arduino pin connected to VRX pin
#define VRY_PIN A1 // Arduino pin connected to VRY pin
int xValue = 0; // To store value of the X axis
int yValue = 0; // To store value of the Y axis
void setup() {
Serial.begin(9600);
Mouse.begin();
}
void loop() {
xValue = analogRead(VRX_PIN);
yValue = analogRead(VRY_PIN);
if (xValue > 600)
Mouse.move(10, 0, 0);
else if (xValue < 450)
Mouse.move(-10, 0, 0);
if (yValue > 600)
Mouse.move(0, 10, 0);
else if (yValue < 450)
Mouse.move(0, -10, 0);
delay(50);
}
Mouse.begin() ne doit être appelé qu'une seule fois.
Tenir aussi compte des remarques de @lesept : au repos ton joystick n'est pas forcément à 512.
D'accord,donc pour commencer,j'ai utilisé ce code:
#include <Mouse.h>
#define VRX_PIN A0 // Arduino pin connected to VRX pin
#define VRY_PIN A1 // Arduino pin connected to VRY pin
int xValue = 0; // To store value of the X axis
int yValue = 0; // To store value of the Y axis
void setup() {
Serial.begin(9600);
Mouse.begin();
}
void loop() {
xValue = analogRead(VRX_PIN);
yValue = analogRead(VRY_PIN);
Serial.println(xValue);
delay(100);
Serial.println(yValue);
}
Mais le résultat que j'obtient au repos est celui là:
Et même en allant à fond sur les axes du joystick,j'ai ce résultat (cela passe parfois à 1022)
Donc ton joystick est mal connecté.
La valeur lue sur les entrées analogiques ne doit pas bouger si tu enfonces le bouton (éventuellement quelques pas si tu n'enfonces pas le bouton bien droit).