⭐⭐ Principiante avanzato
⏱️ 25 minuti
Gioco dei riflessi
Quanto sei veloce? Aspetta che il LED si accenda e poi premi il pulsante il più in fretta possibile. Lo schermo mostra il tuo tempo in millisecondi. Sfida i tuoi amici!
🧰 Che cosa ti serve?
💡
1× LED (lampadina)
🔌
Cavo USB + Cavetti jumper🗺️ Schema di collegamento
Segui i fili dall'Arduino a ogni componente. Puoi scegliere tu i colori dei fili.
| Da | A |
|---|---|
Arduino UNO · D2 |
Pulsante · 1 |
Pulsante · 2 |
Arduino UNO · GND |
Arduino UNO · D13 |
Resistenza 220 Ω · 1 |
Resistenza 220 Ω · 2 |
LED (lampadina) · ANODE |
LED (lampadina) · CATHODE |
Arduino UNO · GND |
Arduino UNO · A4 |
Piccolo schermo OLED 0,91" · SDA |
Arduino UNO · A5 |
Piccolo schermo OLED 0,91" · SCL |
Arduino UNO · 5V |
Piccolo schermo OLED 0,91" · VCC |
Arduino UNO · GND |
Piccolo schermo OLED 0,91" · GND |
🛠️ Così lo costruisci
- Metti il pulsante sopra la fessura della breadboard: un piedino va al pin 2, un piedino dall’altro lato va a GND.
- Metti il LED con una resistenza da 220 Ω sul pin 13, con il piedino corto verso GND.
- Collega lo schermo OLED: SDA ad A4, SCL ad A5, VCC a 5V e GND a GND.
💻 Il codice
// Gioco dei riflessi
// Aspetta che il LED si accenda e poi premi il pulsante il piu in fretta possibile.
// Lo schermo mostra quanto sei stato veloce!
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int PIN_PULSANTE = 2; // Pulsante sul pin 2 (altro lato a GND)
const int PIN_LED = 13; // LED sul pin 13 (con la resistenza)
Adafruit_SSD1306 schermo(128, 32, &Wire, -1); // OLED: SDA = A4, SCL = A5
unsigned long migliorTempo = 0; // Il tuo tempo piu veloce finora
// Mostra un testo grande sullo schermo
void mostra(const __FlashStringHelper* sopra, unsigned long numero) {
schermo.clearDisplay();
schermo.setTextSize(1);
schermo.setCursor(0, 0);
schermo.print(sopra);
if (numero > 0) {
schermo.setTextSize(2);
schermo.setCursor(0, 14);
schermo.print(numero);
schermo.print(F(" ms"));
}
schermo.display();
}
void setup() {
pinMode(PIN_PULSANTE, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT);
randomSeed(analogRead(A0)); // Crea attese davvero casuali
schermo.begin(SSD1306_SWITCHCAPVCC, 0x3C);
schermo.setTextColor(SSD1306_WHITE);
}
void loop() {
mostra(F("Premi il tasto..."), 0);
while (digitalRead(PIN_PULSANTE) == HIGH); // Aspetta finche premi il pulsante
while (digitalRead(PIN_PULSANTE) == LOW); // ...e poi lo lasci
mostra(F("Pronto? Occhio LED!"), 0);
delay(random(2000, 5000)); // Un'attesa segreta tra 2 e 5 secondi
if (digitalRead(PIN_PULSANTE) == LOW) { // Premuto troppo presto? Furbetto!
mostra(F("Presto! Riprova."), 0);
delay(2000);
return;
}
digitalWrite(PIN_LED, HIGH); // ORA!
unsigned long inizio = millis();
while (digitalRead(PIN_PULSANTE) == HIGH); // Aspetta la tua pressione
unsigned long tempo = millis() - inizio;
digitalWrite(PIN_LED, LOW);
if (migliorTempo == 0 || tempo < migliorTempo) {
migliorTempo = tempo;
mostra(F("NUOVO RECORD!"), tempo);
} else {
mostra(F("Tuo tempo:"), tempo);
}
delay(3000);
}
🧠 Che cosa fa il codice?
- Dopo aver premuto il pulsante, aspettiamo un tempo segreto tra 2 e 5 secondi (
random()). - Poi il LED si accende e facciamo partire un cronometro con
millis(). - Quando premi, calcoliamo quanti millisecondi sono passati. Ricordiamo il tuo tempo migliore.
🎯 Prova anche…
- Trasformalo in un gioco per due giocatori, ognuno con il suo pulsante
- Fai suonare un buzzer quando c’è un nuovo record
- Gioca 5 turni e poi mostra il tuo tempo medio
🚀 Costruisci questo progetto con Codey: apri codey.online/it/starter-kits/uno/projects/reaction-game e clicca su FAI QUESTO. Così il codice e lo schema di collegamento sono subito pronti.
Codey Online è un prodotto di OTRONIC