Comment utiliser un joystick avec Arduino?
Dans ce post nous allons connecter le module joystick a la plaque d’ Arduino. D’abord, on va déterminer le mouvement en sortant les données via le moniteur série, et après on allumera plusieurs diodes suivant le mouvement du joystick.
Ce module se connecte à la plaque d’ Arduino de façon très simple. Le joystick consiste à lire deux résistances variables (x et y) et dispose aussi d’un bouton sélecteur.
Table de matières:
Connexion d’un joystick à la plaque Arduino.
Il est nécessaire:
- Arduino Uno ou équivalent.
- 5 fils mâle-femelle.
- Un joystick analogique.
Il faut savoir que la plaque Arduino use un microcontrôleur ATmega328 avec une résolution ACD de 10 bits. Cela veut dire que les valeurs de chaque voie analogique peuvent varier de 0 à 1023. Ainsi, on déduit que la position initial du joystick est (x, y) = (511, 511).
Code:
const int pinX = A0;
const int pinY = A1;
const int pinBouton = 9;
void setup() {
pinMode(pinBouton , INPUT_PULLUP); //on active la résistance pull up
Serial.begin(9600);
}
void loop() {
int X = 0;
int Y = 0;
bool boutonValeur = false;
//on lit les valeurs
X = analogRead(pinX);
/*il est nécessaire de faire un pause entre les lectures des différents
pins analogiques si on veut éviter l'obtention double de la même
lecture (dû au fonctionnement interne des pins) */
delay(100);
Y = analogRead(pinY);
boutonValeur = digitalRead(pinBouton);
//montrer les valeurs à l'écran
Serial.print("X:" );
Serial.print(X);
Serial.print(" | Y: ");
Serial.print(Y);
Serial.print(" | Pulsateur: ");
Serial.println(boutonValeur);
delay(1000);
}
Allumer une diode suivant le mouvement du joystick.
Ce petit projet nous permettra d’allumer 4 diodes placées dans les quatre directions (en haut, en bas, à gauche et à droite).
Il est nécessaire:
- Arduino Uno ou équivalent.
- Une plaque d’essai ou breadboard.
- Fils mâle- femelle.
- Un joystick analogique.
- 4 led.
- 4 résistances de 220 Ohms.
Code:
int axey = A1; // Entrée de référence pour l'axe Y.
int axex = A0; // Entrée de référence pour l'axe X.
int ledup = 12; // Led supérieur.
int ledD = 13; // Led inférieur.
int ledL = 10; // Led gauche.
int ledR = 11; // Led droite.
int valeurX;
int valeurY;
void setup() {
Serial.begin(9600);
/* Définition des leds
comme sorties */
pinMode(ledup, OUTPUT);
pinMode(ledD, OUTPUT);
pinMode(ledL, OUTPUT);
pinMode(ledR, OUTPUT);
}
void loop() {
valeurX = analogRead(axex);
if (valeurX > 700){ // droite
digitalWrite(ledR,HIGH);
Serial.print("x = ");
Serial.println(valeurX);
}else{
digitalWrite(ledR, LOW );
}
valeurX = analogRead(axex);
if (valeurX < 400){ // gauche
digitalWrite(ledL,HIGH);
Serial.print("x = ");
Serial.println(valeurX);
}else{
digitalWrite(ledL, LOW );
}
valeurY = analogRead(axey);
if (valeurY > 700){ // en haut
digitalWrite(ledup,HIGH);
Serial.print("y = ");
Serial.println(valeurY);
}else{
digitalWrite(ledup, LOW );
}
valeurY = analogRead(axey);
if (valeurY < 400){ // en bas
digitalWrite(ledD,HIGH);
Serial.print("y = ");
Serial.println(valeurY);
}else{
digitalWrite(ledD, LOW );
}
}
Révisant le code on peut voir que dans la fonction setup() on a assigné les pins comme sorties, et la fonction loop() vérifie la direction vers laquelle on manipule le joystick. La position initial est (511, 511) équivalente à (0, 0).
Teston que pour indiquer la droite, X doit être supérieur à 700; pour indiquer la gauche, X doit être inférieur à 400; pour indiquer en haut, Y doit être supérieur a 700; et pour indiquer en bas, Y doit être inférieur à 400.
On vous propose un défi:
Arriver à allumer les 4 diodes en pressant le bouton du joystick… évaluez votre talent !!!