Gra reakcji: stoper
Część sekcji Projekty ścieżki Arduino w Coddy. Lekcja 6 z 24.
Teraz gra mierzy Twój czas. Czas reakcji to czas od zapalenia się diody LED do naciśnięcia przycisku, więc szkic musi zapamiętać jeden moment: kiedy dioda LED się zapaliła.
digitalWrite(ledPin, HIGH);
litAt = millis();
state = LIT;Gdy naciśnięcie nastąpi w stanie LIT, różnica jest odpowiedzią:
unsigned long reaction = millis() - litAt;
Serial.print("Reaction: ");
Serial.print(reaction);
Serial.println(" ms");Działa to tylko dlatego, że szkic nigdy nie zatrzymuje się w delay(): loop() sprawdza przycisk tysiące razy na milisekundę, więc naciśnięcie zostaje wykryte mniej niż milisekundę po jego nastąpieniu. Większość osób potrzebuje od 200 do 300 ms.
Wyzwanie
ŚredniMierz czas gracza:
- zapisz
millis()wlitAt, gdy zaświeci się dioda LED - gdy naciśnięcie nastąpi w stanie
LIT, obliczmillis() - litAt - wyświetl wynik w formacie
Reaction: 250 ms
Naciśnij Run, zagraj, odczytaj dane w monitorze portu szeregowego, a następnie naciśnij Check.
Spróbuj swoich sił
const int ledPin = 12;
const int buttonPin = 2;
// Trzy stany jednej rundy
enum State { READY, WAITING, LIT };
State state = READY;
int lastButton = HIGH; // poprzedni odczyt stanu przycisku
unsigned long waitStart = 0; // kiedy rozpoczęło się oczekiwanie
unsigned long waitTime = 0; // jak długo trwa to oczekiwanie
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); // przycisk naciśnięty właśnie teraz
lastButton = button;
unsigned long now = millis();
switch (state) {
case READY:
if (pressed) {
randomSeed(micros()); // moment naciśnięcia nigdy nie jest dwa razy taki sam
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;
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Projekty
2Gra reakcji
Gra reakcji: losowe oczekiwanieGra reakcji: stoperGra reakcji: falstartGra reakcji: najlepszy czasPoćwicz samodzielnie: Edytor online Arduino