Note

Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.

  • Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.

👉 Prêt à explorer et à créer avec nous ? Cliquez [ ici ] et rejoignez-nous aujourd’hui !

6.5 Jeu de Réaction

Notre corps a de nombreux temps de réaction, tels que le temps de réaction auditif, visuel, tactile, etc.

Les temps de réaction ont de nombreux effets sur notre vie quotidienne, par exemple, des temps de réaction plus lents que la normale en conduisant peuvent entraîner de graves conséquences.

Dans ce projet, nous utilisons 3 boutons et 2 LED pour mesurer notre temps de réaction visuel.

Le moniteur série de l’Arduino affiche le message « en attente… » Après avoir appuyé sur le bouton Prêt, l’une des deux LED doit s’allumer aléatoirement après un intervalle de temps aléatoire. Il est important que la personne testée appuie sur le bouton correspondant le plus rapidement possible. L’Arduino enregistre la différence de temps entre le moment où la LED s’allume et lorsque la personne appuie sur le bouton correspondant, et imprime le temps de réponse mesuré sur le moniteur série de l’Arduino.

Composants requis

Pour ce projet, nous aurons besoin des composants suivants.

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ÉLÉMENTS DE CE KIT

LIEN

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

Carte SunFounder R3

ACHETER

Plaque d’essai

ACHETER

Fils de Cavalier

ACHETER

Résistance

ACHETER

LED

ACHETER

Bouton

ACHETER

Schéma

../_images/wiring_reaction_game.png

Câblage

../_images/reaction_game.png

Code

Note

  • Vous pouvez ouvrir le fichier 6.5_reaction_time.ino sous le chemin de 3in1-kit\basic_project\6.5_reversingAid directement.

  • Ou copiez ce code dans Arduino IDE .

  • Assurez-vous d’avoir ajouté la bibliothèque LiquidCrystal_I2C, les tutoriels détaillés se réfèrent à 5.11 Installer des bibliothèques externes.

Comment ça fonctionne ?

  1. Initialisez les boutons et les LED, 2 interruptions sont utilisées ici pour lire l’état des boutons.

    void setup()
    {
    
        ...
    
        attachInterrupt(digitalPinToInterrupt(buttonPin1), pressed1, FALLING);
        attachInterrupt(digitalPinToInterrupt(buttonPin2), pressed2, FALLING);
        ...
    }
    
  2. Si le bouton rstBtn est pressé, le jeu recommence. À un moment aléatoire entre 2 et 5ms, faites s’allumer l’une des LED.

    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);
    }
    
    • Lorsque flag est -1 et que le bouton rstBtn est pressé, utilisez la fonction random() pour générer un temps aléatoire de 2-5s.

    • Ce temps est ensuite utilisé pour contrôler l’allumage des LED.

    • Aussi, l’allumage de 2 LED est généré aléatoirement par randomTime % 2 avec 0 et 1. Si flag est 0, alors LED1 est allumée ; si 1, alors LED2 est allumée.

  3. À propos de la fonction 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;
    }
    

    C’est la fonction qui sera déclenchée lorsque le bouton 1 est pressé. Lorsque le bouton 1 est pressé, si le flag est 0 à ce moment, le temps de réponse sera imprimé, sinon une erreur de pression sera indiquée.

  4. À propos de la fonction 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;
    }
    

    C’est la fonction qui sera déclenchée lorsque le bouton 2 est pressé. Lorsque le bouton 2 est pressé, si le flag est 1 à ce moment, le temps de réponse sera imprimé, sinon une erreur de pression sera indiquée.