Jeu de réflexes : attente aléatoire
Fait partie de la section Projets du Journey Arduino de Coddy. Leçon 5 sur 24.
Le prochain projet est un jeu de réflexes. Tu appuies sur le bouton, la carte attend, puis allume la LED, et tu appuies de nouveau aussi vite que possible.
L’attente est aléatoire, sinon tu apprendrais le rythme. random(1000, 3001) donne un nombre entier de 1000 à 3000.
random() est un calcul : après chaque mise sous tension, il donne les mêmes nombres dans le même ordre. randomSeed() choisit où cette séquence commence. Initialise-la avec le moment de l’appui, en microsecondes, qui est différent à chaque partie :
randomSeed(micros());
waitTime = random(1000, 3001);Le jeu est une machine à états avec trois états : READY (en attente d’un appui), WAITING (l’attente aléatoire) et LIT (la LED est allumée). L’attente utilise millis(), afin que les étapes suivantes puissent surveiller le bouton pendant ce temps.
Le code de départ calcule déjà pressed : le bouton lit LOW maintenant et lisait HIGH la dernière fois. Ce bouton ne rebondit pas, donc aucun anti-rebond n’est nécessaire.
Défi
MoyenLe bouton est connecté à la broche 2 et la LED à la broche 12. Complète les trois états :
READY: un appui initialise le générateur avecmicros(), choisit un délai de 1000 à 3000 ms, enregistre l’heure de début et passe àWAITINGWAITING: lorsque le délai est écoulé, allume la LED et passe àLITLIT: un appui éteint la LED et passe àREADY
Appuie sur Run, joue quelques manches, puis clique sur Check.
Essayez vous-même
const int ledPin = 12;
const int buttonPin = 2;
// Les trois états d'une manche
enum State { READY, WAITING, LIT };
State state = READY;
int lastButton = HIGH; // la valeur lue du bouton la fois précédente
unsigned long waitStart = 0; // quand l'attente a commencé
unsigned long waitTime = 0; // la durée de cette attente
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); // vient d'être enfoncé
lastButton = button;
// READY : un appui lance l'attente
// WAITING : quand l'attente est terminée, allumer la LED
// LIT : un appui éteint la LED et le jeu est de nouveau prêt
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Projets
2Jeu de réflexes
Jeu de réflexes : attente aléatoireJeu de réflexes : chronomètreJeu de réflexes : faux départJeu de réflexes : meilleur tempsEntraînez-vous par vous-même : Playground Arduino