Game Reaksi: Waktu Tunggu Acak
Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 5 dari 24.
Proyek berikutnya adalah game reaksi. Kamu menekan tombol, papan menunggu, lalu menyalakan LED, dan kamu menekan tombol lagi secepat mungkin.
Waktu tunggunya acak, kalau tidak, kamu akan mempelajari ritmenya. random(1000, 3001) memberikan bilangan bulat dari 1000 hingga 3000.
random() adalah perhitungan: setiap kali dinyalakan, fungsi ini memberikan angka yang sama dalam urutan yang sama. randomSeed() menentukan titik awal urutan tersebut. Berikan nilai awal berupa waktu saat tombol ditekan, dalam mikrodetik, yang berbeda di setiap permainan:
randomSeed(micros());
waitTime = random(1000, 3001);Game ini adalah mesin status dengan tiga status: READY (menunggu tombol ditekan), WAITING (menunggu selama waktu acak) dan LIT (LED menyala). Waktu tunggu menggunakan millis(), sehingga langkah berikutnya dapat memantau tombol selama waktu tunggu.
Kode awal sudah menentukan pressed: tombol terbaca LOW sekarang dan terbaca HIGH sebelumnya. Tombol ini tidak memantul, jadi tidak memerlukan debouncing.
Tantangan
SedangTombol terhubung ke pin 2 dan LED ke pin 12. Lengkapi tiga status berikut:
READY: saat tombol ditekan, gunakanmicros()sebagai seed, pilih waktu tunggu 1000 hingga 3000 ms, simpan waktu mulai, lalu beralih keWAITINGWAITING: saat waktu tunggu berakhir, nyalakan LED dan beralih keLITLIT: saat tombol ditekan, matikan LED dan beralih keREADY
Tekan Jalankan, mainkan beberapa ronde, lalu tekan Periksa.
Coba sendiri
const int ledPin = 12;
const int buttonPin = 2;
// Tiga keadaan dalam satu ronde
enum State { READY, WAITING, LIT };
State state = READY;
int lastButton = HIGH; // hasil pembacaan tombol sebelumnya
unsigned long waitStart = 0; // kapan waktu tunggu dimulai
unsigned long waitTime = 0; // berapa lama waktu tunggu ini berlangsung
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;
// READY: menekan tombol memulai waktu tunggu
// WAITING: saat waktu tunggu berakhir, nyalakan LED
// LIT: menekan tombol mematikan LED dan permainan siap lagi
}
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