Jeu Whack-a-Mole à LEDs avec Arduino Uno – Projet interactif LED et joystick
Composants et fournitures
| Arduino UNO | ×1 |
| LEDs | ×7 |
| Résistance 221 ohm | ×7 |
| Joystick analogique (générique) | ×1 |
| Fils de connexion (génériques) | ×8 |
| Fils Male/Femelle | ×4 |
À propos de ce projet
C'était mon premier projet Arduino, construit sur la base des premiers tutoriels sur les LEDs et les contrôles de base.
Ce jeu « Whack-a-Mole » (Tape-la-taupe) utilise 7 LEDs et un joystick. Il y a 4 « taupes », représentées par les 2ème, 3ème, 4ème et 5ème LEDs de gauche sur ma carte. L'une des quatre LEDs s'allume aléatoirement et donne un temps défini pour actionner la direction correspondante sur le joystick. J'ai disposé mes LEDs de gauche à droite pour correspondre aux sélections du joystick : gauche, haut, bas, droite. C'est ma convention, soyez créatif et essayez d'autres dispositions !
Les deux LEDs de gauche sont rouge et verte, indiquant un choix incorrect ou correct. La LED jaune à l'extrême droite clignote pour afficher le score record actuel, et l'indique à chaque fin de partie (lorsqu'un mauvais choix est fait). Naturellement, un nouveau record remplace l'ancien.
La partie la plus complexe est le joystick analogique. Pour les deux axes, les valeurs max sont 0 et 1024 (pour le mien, 1023, donc si les sélections ne fonctionnent pas, essayez cette valeur). Ces valeurs peuvent être mesurées via le moniteur série. J'ai simplifié ces entrées avec des instructions switch pour les axes X et Y. Je ne sais pas si c'est la meilleure méthode, mais comme je n'avais besoin que des valeurs max de chaque direction (4 options, 4 LEDs taupes), j'ai assigné des valeurs entières : 1, 2, 3, 4 correspondant à Gauche, Droite, Haut, Bas.

Les niveaux de difficulté dans le code sont des constantes représentant le temps en millisecondes pour faire une sélection. Vous pouvez modifier ces temps pour ajuster la difficulté. J'ai pensé à intégrer un choix de difficulté via boutons ou joystick au début, mais cela semblait trop complexe et pas très convivial.
N'hésitez pas à suggérer des modifications et améliorations ! :)
Code
WhackALED (Arduino)
// Whack a LED
// Variables joystick
int sX = A0; // axe X joystick, entrée analogique
int sY = A1; // axe Y joystick, entrée analogique
int sSX; // état X, lecture depuis sX
int sSY; // état Y, lecture depuis sY
int sS; // état converti
// Variables jeu
int rNum; // choix aléatoire de la LED à allumer
int wins = 0; // compteur de victoires consécutives
int highScore = 0; // meilleur score de victoires consécutives
// Constantes de difficulté (temps de réaction en ms)
const int easy = 1000;
const int medium = 500;
const int hard = 325;
const int stupid = 250;
int ledPins[] = {5, 2, 4, 3, 6, 7, 8}; // broches des LEDs
int pinCount = 7; // nombre de broches LED
void setup() {
Serial.begin(9600);
pinMode(sX, INPUT);
pinMode(sY, INPUT);
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
pinMode(ledPins[thisPin], OUTPUT);
}
}
void loop() {
rNum = random(4); // choix aléatoire 0-3
delay(1000);
digitalWrite(ledPins[rNum], HIGH); // allume la LED choisie
delay(stupid); // difficulté (ici 'stupid' = 250ms)
// Lecture joystick
sSX = analogRead(sX);
delay(100);
sSY = analogRead(sY);
// Conversion entrées X et Y en 4 possibilités (0 et 1023 = valeurs max mesurées)
sS = 0;
switch (sSX) {
case 0: sS = 1; break; // Gauche
case 1023: sS = 2; break; // Droite
}
switch (sSY) {
case 0: sS = 3; break; // Haut
case 1023: sS = 4; break; // Bas
}
digitalWrite(ledPins[rNum], LOW); // éteint la LED après choix
if (sS - 1 == rNum) { // vérifie si direction correcte
wins++;
for (int k = 0; k <= 3; k++) { // clignote vert (LED index 4) = correct
digitalWrite(ledPins[4], HIGH); delay(50);
digitalWrite(ledPins[4], LOW); delay(50);
}
} else {
if (wins > highScore) { // nouveau record ?
highScore = wins;
wins = 0;
}
for (int i = 0; i <= 3; i++) { // clignote rouge (LED index 5) = incorrect
digitalWrite(ledPins[5], HIGH); delay(50);
digitalWrite(ledPins[5], LOW); delay(50);
}
for (int w = 0; w < highScore; w++) { // affiche record sur LED jaune (index 6)
digitalWrite(ledPins[6], HIGH); delay(200);
digitalWrite(ledPins[6], LOW); delay(200);
}
}
}
Schéma de câblage
Tout doit correspondre à la photo réelle du projet, sauf pour le joystick. Le mien a 5 broches, 4 utilisées : de haut en bas « GND », « +5V », « VRx », « VRy ». « GND » et « +5V » connectés à GND et 5V de l'Arduino, « VRx » et « VRy » à A0 et A1.


Processus de fabrication
- Les lanternes à gaz : évolution, conception et fabrication moderne
- Pointeur laser : conception, fabrication et aperçu de la sécurité
- Lampe Torche : De l'Invention à l'Innovation Moderne
- Le kaléidoscope : de la science de Brewster au design moderne
- Lasers à semi-conducteurs : Génération de lumière de précision pour la technologie moderne
- L'art et la science des procédés photographiques : du daguerréotype au film moderne
- Feux de signalisation : ingénierie, histoire et innovations futures
- Maîtriser les accessoires pour bandeaux LED : connecter, contrôler, personnaliser
- Décoder le tableau de bord de votre voiture : voyants, indicateurs et leur signification