Gioco di reazione: timer
Fa parte della sezione Progetti del percorso Arduino di Coddy. Lezione 6 di 24.
Ora il gioco ti misura. Il tempo di reazione è il tempo che intercorre tra l'accensione del LED e la tua pressione, quindi lo sketch deve ricordare un momento: quando ha acceso il LED.
digitalWrite(ledPin, HIGH);
litAt = millis();
state = LIT;Quando arriva la pressione nello stato LIT, la differenza è la risposta:
unsigned long reaction = millis() - litAt;
Serial.print("Reaction: ");
Serial.print(reaction);
Serial.println(" ms");Questo funziona solo perché lo sketch non si ferma mai in un delay(): loop() controlla il pulsante migliaia di volte ogni millisecondo, quindi la pressione viene rilevata meno di un millisecondo dopo che si verifica. La maggior parte delle persone impiega dai 200 ai 300 ms.
Sfida
MedioCronometra il giocatore:
- salva
millis()inlitAtquando il LED si accende - quando arriva la pressione in
LIT, calcolamillis() - litAt - stampalo come
Reaction: 250 ms
Premi Run, gioca, leggi il monitor seriale, poi Check.
Provalo tu
const int ledPin = 12;
const int buttonPin = 2;
// I tre stati di un ciclo
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;
unsigned long now = millis();
switch (state) {
case READY:
if (pressed) {
randomSeed(micros()); // il momento della pressione non è mai identico due volte
waitTime = random(1000, 3001);
waitStart = now;
state = WAITING;
}
break;
case WAITING:
if (now - waitStart >= waitTime) {
digitalWrite(ledPin, HIGH);
state = LIT;
}
break;
case LIT:
if (pressed) {
digitalWrite(ledPin, LOW);
state = READY;
}
break;
}
}
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