Gioco di reazione: attesa casuale
Fa parte della sezione Progetti del percorso Arduino di Coddy. Lezione 5 di 24.
Il prossimo progetto è un gioco di reazione. Premi il pulsante, la scheda aspetta, poi accende il LED e tu premi di nuovo il più velocemente possibile.
L'attesa è casuale, altrimenti impareresti il ritmo. random(1000, 3001) restituisce un numero intero da 1000 a 3000.
random() è un calcolo: dopo ogni accensione restituisce gli stessi numeri nello stesso ordine. randomSeed() sceglie da dove inizia quella sequenza. Inizializzala con il momento della pressione, in microsecondi, che è diverso a ogni partita:
randomSeed(micros());
waitTime = random(1000, 3001);Il gioco è una macchina a stati con tre stati: READY (in attesa di una pressione), WAITING (l'attesa casuale) e LIT (il LED è acceso). L'attesa usa millis(), così i passaggi successivi possono controllare il pulsante durante l'attesa.
Il codice iniziale determina già pressed: il pulsante ora legge LOW e l'ultima volta leggeva HIGH. Questo pulsante non rimbalza, quindi non serve alcun debounce.
Sfida
MedioIl pulsante è sul pin 2 e il LED sul pin 12. Completa i tre stati:
READY: una pressione imposta il seme conmicros(), sceglie un'attesa da 1000 a 3000 ms, salva l'ora di inizio e passa aWAITINGWAITING: quando l'attesa è terminata, accendi il LED e passa aLITLIT: una pressione spegne il LED e passa aREADY
Premi Run, gioca alcuni turni, poi Check.
Provalo tu
const int ledPin = 12;
const int buttonPin = 2;
// I tre stati di un turno
enum State { READY, WAITING, LIT };
State state = READY;
int lastButton = HIGH; // la lettura precedente del pulsante
unsigned long waitStart = 0; // quando è iniziata l'attesa
unsigned long waitTime = 0; // quanto dura questa attesa
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("Press the button to start");
}
void loop() {
int button = digitalRead(buttonPin);
bool pressed = (button == LOW && lastButton == HIGH); // premuto proprio ora
lastButton = button;
// READY: una pressione avvia l'attesa
// WAITING: al termine dell'attesa, accendi il LED
// LIT: una pressione spegne il LED e il gioco è di nuovo pronto
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Progetti
2Gioco di reazione
Gioco di reazione: attesa casualeGioco di reazione: timerGioco di reazione: falsa partenzaGioco di reazione: tempo miglioreEsercitati da solo: Playground Arduino