Nota
Ciao, benvenuto nella Community SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti?
Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato ai nuovi annunci di prodotti e alle anteprime.
Sconti speciali: Approfitta di sconti esclusivi sui nostri nuovi prodotti.
Promozioni e omaggi festivi: Partecipa a promozioni e omaggi durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!
6.5 Gioco di Reazione¶
Il nostro corpo ha diversi tempi di reazione, come quello uditivo, visivo, tattile, ecc.
I tempi di reazione influenzano molte attività della nostra vita quotidiana; ad esempio, tempi di reazione più lenti alla guida possono avere conseguenze gravi.
In questo progetto, utilizziamo 3 pulsanti e 2 LED per misurare il tempo di reazione visiva.
Il monitor seriale di Arduino visualizza il messaggio «waiting…» Dopo aver premuto il pulsante Ready, uno dei due LED si accenderà casualmente dopo un intervallo di tempo casuale. È importante che il partecipante preme il pulsante corrispondente il più velocemente possibile. Arduino registra il tempo che intercorre tra l’accensione del LED e la pressione del pulsante e stampa il tempo di reazione misurato sul monitor seriale di Arduino.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un intero kit, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
3 in 1 Starter Kit |
380+ |
Puoi anche acquistarli separatamente dai link qui sotto.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
Schema Elettrico
Collegamenti
Codice
Nota
Puoi aprire il file
6.5_reaction_time.inonel percorso3in1-kit\basic_project\6.5_reversingAiddirettamente.Oppure copia questo codice nell”Arduino IDE.
Assicurati di aver aggiunto la libreria
LiquidCrystal_I2C, fai riferimento al tutorial dettagliato: 5.11 Installare Librerie Esterne.
Come funziona?
Inizializza i pulsanti e i LED, qui vengono utilizzati 2 interrupt per leggere lo stato dei pulsanti.
void setup() { ... attachInterrupt(digitalPinToInterrupt(buttonPin1), pressed1, FALLING); attachInterrupt(digitalPinToInterrupt(buttonPin2), pressed2, FALLING); ... }
Se il pulsante
rstBtnviene premuto, il gioco ricomincia. Dopo un intervallo di tempo casuale compreso tra 2 e 5ms, uno dei LED si accende.void loop() { if (flag == -1 && digitalRead(rstBtn) == LOW) { digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); Serial.println("Waiting..."); int randomTime = random(2000, 5000); delay(randomTime); timer = millis(); flag = randomTime % 2; Serial.println("Light!"); if (flag == 0) { digitalWrite(ledPin1, HIGH); } else if (flag == 1) { digitalWrite(ledPin2, HIGH); } } delay(200); }
Quando il flag è -1 e il pulsante
rstBtnviene premuto, utilizza la funzionerandom()per generare un tempo casuale tra 2 e 5 secondi.Questo tempo viene poi utilizzato per controllare l’accensione dei LED.
L’accensione dei 2 LED viene generata casualmente tramite
randomTime % 2con 0 e 1. Se il flag è 0, si accende il LED1; se 1, si accende il LED2.
Funzione
pressed1()void pressed1() { if (flag == -1) { return; } if (flag == 0) { int currentTime = millis(); Serial.print("Correct! You reaction time is : "); Serial.print(currentTime - timer); Serial.println(" ms"); } else if (flag == 1) { Serial.println("Wrong Click!"); } flag = -1; }
Questa è la funzione che viene attivata quando viene premuto il pulsante 1. Se il flag è 0, viene stampato il tempo di reazione; altrimenti viene segnalato l’errore di pressione.
Funzione
pressed2()void pressed2() { if (flag == -1) { return; } if (flag == 1) { int currentTime =millis(); Serial.print("Correct! You reaction time is : "); Serial.print(currentTime - timer); Serial.println(" ms"); } else if (flag == 0) { Serial.println("Wrong Click!"); } flag = -1; }
Questa è la funzione che viene attivata quando viene premuto il pulsante 2. Se il flag è 1, viene stampato il tempo di reazione; altrimenti viene segnalato l’errore di pressione.