⭐⭐ Débutant avancé
⏱️ 25 minutes
Jeu de réflexes
À quelle vitesse réagis-tu ? Attends que la LED s'allume. Puis appuie le plus vite possible sur le bouton. L'écran montre ton temps en millisecondes. Défie tes amis !
🧰 De quoi as-tu besoin ?
💡
1× LED (petite lampe)
🔌
Câble USB + Câbles jumper🗺️ Schéma de branchement
Suis les fils de l’Arduino vers chaque pièce. Tu peux choisir toi-même les couleurs des fils.
| De | Vers |
|---|---|
Arduino UNO · D2 |
Bouton-poussoir · 1 |
Bouton-poussoir · 2 |
Arduino UNO · GND |
Arduino UNO · D13 |
Résistance 220 Ω · 1 |
Résistance 220 Ω · 2 |
LED (petite lampe) · ANODE |
LED (petite lampe) · CATHODE |
Arduino UNO · GND |
Arduino UNO · A4 |
Petit écran OLED 0,91" · SDA |
Arduino UNO · A5 |
Petit écran OLED 0,91" · SCL |
Arduino UNO · 5V |
Petit écran OLED 0,91" · VCC |
Arduino UNO · GND |
Petit écran OLED 0,91" · GND |
🛠️ Voici comment le construire
- Place le bouton-poussoir au-dessus de la fente du breadboard : une patte vers pin 2, une patte de l'autre côté vers GND.
- Place la LED avec une résistance de 220 Ω sur pin 13, la patte courte vers GND.
- Branche l'écran OLED : SDA vers A4, SCL vers A5, VCC vers 5V et GND vers GND.
💻 Le code
// Jeu de réflexes
// Attends que la LED s'allume, puis appuie le plus vite possible sur le bouton.
// L'écran montre à quelle vitesse tu as réagi !
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int BOUTON_PIN = 2; // Bouton sur pin 2 (autre côté vers GND)
const int LED_PIN = 13; // LED sur pin 13 (avec la résistance)
Adafruit_SSD1306 ecran(128, 32, &Wire, -1); // OLED: SDA = A4, SCL = A5
unsigned long meilleurTemps = 0; // Ton meilleur temps jusqu'ici
// Affiche un texte en grand sur l'écran
void affiche(const __FlashStringHelper* texteHaut, unsigned long nombre) {
ecran.clearDisplay();
ecran.setTextSize(1);
ecran.setCursor(0, 0);
ecran.print(texteHaut);
if (nombre > 0) {
ecran.setTextSize(2);
ecran.setCursor(0, 14);
ecran.print(nombre);
ecran.print(F(" ms"));
}
ecran.display();
}
void setup() {
pinMode(BOUTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
randomSeed(analogRead(A0)); // Donne des temps d'attente vraiment au hasard
ecran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
ecran.setTextColor(SSD1306_WHITE);
}
void loop() {
affiche(F("Presse bouton..."), 0);
while (digitalRead(BOUTON_PIN) == HIGH); // Attendre que tu appuies sur le bouton
while (digitalRead(BOUTON_PIN) == LOW); // ...puis que tu le relâches
affiche(F("Pret? LED!"), 0);
delay(random(2000, 5000)); // Un temps secret entre 2 et 5 secondes
if (digitalRead(BOUTON_PIN) == LOW) { // Appuyé trop tôt ? Tricheur !
affiche(F("Trop tot! Encore."), 0);
delay(2000);
return;
}
digitalWrite(LED_PIN, HIGH); // MAINTENANT !
unsigned long start = millis();
while (digitalRead(BOUTON_PIN) == HIGH); // Attendre ton appui
unsigned long temps = millis() - start;
digitalWrite(LED_PIN, LOW);
if (meilleurTemps == 0 || temps < meilleurTemps) {
meilleurTemps = temps;
affiche(F("NOUV. RECORD!"), temps);
} else {
affiche(F("Ton temps:"), temps);
}
delay(3000);
}
🧠 Que fait le code ?
- Après un appui sur le bouton, on attend un temps secret entre 2 et 5 secondes (
random()). - Puis la LED s'allume et on lance un chronomètre avec
millis(). - Quand tu appuies, on calcule combien de millisecondes se sont écoulées. On garde ton meilleur temps.
🎯 Essaie un peu…
- Fais-en un jeu pour deux joueurs, avec un bouton pour chacun
- Fais biper un buzzer quand il y a un nouveau record
- Joue 5 manches, puis affiche ton temps moyen
🚀 Construis ce projet avec Codey : ouvre codey.online/fr/starter-kits/uno/projects/reaction-game et clique sur FAIS ÇA. Alors le code et le schéma de branchement sont tout de suite prêts.
Codey Online est un produit de OTRONIC