Game Reaksi: Waktu Terbaik
Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 8 dari 24.
Sketch ini menyimpan waktu terbaik (terendah) dalam sebuah variabel dan mencetaknya setelah setiap putaran.
Pada awalnya belum ada waktu terbaik. Gunakan nilai yang tidak mungkin diperoleh dalam putaran sungguhan, yaitu 0, untuk menandakan "belum ada". Setelah setiap putaran: jika belum ada waktu terbaik, atau putaran ini lebih baik, waktu putaran ini menjadi waktu terbaik yang baru.
if (best == 0 || reaction < best) {
best = reaction;
}
Serial.print("Best: ");
Serial.print(best);
Serial.println(" ms");Letakkan ini di state LIT, tempat putaran berakhir dengan waktu yang sebenarnya. Start palsu tidak pernah mencapai kode itu, jadi tidak akan menjadi rekor.
Waktu terbaik tersimpan di memori board (RAM), yang dihapus saat daya dimatikan: rekor bertahan sampai kamu menekan Jalankan lagi.
Tantangan
SedangSimpan catatan:
- sebuah variabel
best, bernilai 0 di awal - setelah setiap ronde yang waktunya diukur, jika
bestbernilai 0 atau ronde tersebut lebih cepat, simpan waktu ronde itu sebagai catatan terbaik baru - cetak nilainya setelah setiap ronde sebagai
Best: 250 ms - awal yang terlalu cepat tidak mengubah apa pun
Tekan Jalankan, coba pecahkan catatan terbaikmu, lalu tekan Periksa.
Coba sendiri
const int ledPin = 12;
const int buttonPin = 2;
// Tiga keadaan dalam satu putaran
enum State { READY, WAITING, LIT };
State state = READY;
int lastButton = HIGH; // pembacaan tombol sebelumnya
unsigned long waitStart = 0; // saat penantian dimulai
unsigned long waitTime = 0; // berapa lama penantian ini berlangsung
unsigned long litAt = 0; // saat LED menyala
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); // baru saja ditekan
lastButton = button;
unsigned long now = millis();
switch (state) {
case READY:
if (pressed) {
randomSeed(micros()); // waktu penekanan tidak pernah sama dua kali
waitTime = random(1000, 3001);
waitStart = now;
state = WAITING;
}
break;
case WAITING:
if (pressed) {
// Ditekan sebelum lampu menyala: awal yang terlalu cepat.
Serial.println("Too soon!");
state = READY;
} else if (now - waitStart >= waitTime) {
digitalWrite(ledPin, HIGH);
litAt = now;
state = LIT;
}
break;
case LIT:
if (pressed) {
digitalWrite(ledPin, LOW);
unsigned long reaction = now - litAt;
Serial.print("Reaction: ");
Serial.print(reaction);
Serial.println(" ms");
state = READY;
}
break;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Proyek
2Game Reaksi
Game Reaksi: Waktu Tunggu AcakGame Reaksi: TimerGame Reaksi: Mulai Terlalu CepatGame Reaksi: Waktu TerbaikLatihan sendiri: Playground Arduino