Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang

Tombol terhubung ke pin 2 dan LED ke pin 12. Lengkapi tiga status berikut:

  • READY: saat tombol ditekan, gunakan micros() sebagai seed, pilih waktu tunggu 1000 hingga 3000 ms, simpan waktu mulai, lalu beralih ke WAITING
  • WAITING: saat waktu tunggu berakhir, nyalakan LED dan beralih ke LIT
  • LIT: saat tombol ditekan, matikan LED dan beralih ke READY

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

}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Proyek

Latihan sendiri: Playground Arduino