Menu
CoddyTech

Tepki Oyunu: Rastgele Bekleme

Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 5 / 24.

Sonraki proje bir tepki oyunudur. Düğmeye basarsın, kart bekler, sonra LED'i yakar ve sen de olabildiğince hızlı tekrar basarsın.

Bekleme süresi rastgeledir; yoksa ritmi öğrenirdin. random(1000, 3001), 1000 ile 3000 arasında bir tam sayı verir.

random() bir hesaplamadır: her açılıştan sonra aynı sayıları aynı sırayla verir. randomSeed() bu dizinin nereden başlayacağını belirler. Her oyunda farklı olan basma anını mikrosaniye cinsinden kullanarak başlangıç değerini ayarla:

randomSeed(micros());
waitTime = random(1000, 3001);

Oyun üç durumlu bir durum makinesidir: READY (basılmasını bekliyor), WAITING (rastgele bekleme) ve LIT (LED yanıyor). Bekleme süresi millis() kullanır; böylece sonraki adımlar sırasında düğmenin durumunu kontrol edebilirsin.

Başlangıç kodu pressed değerini zaten hesaplıyor: düğme şimdi LOW okuyor, önceki okumada ise HIGH idi. Bu düğme sekme yapmadığından debounce gerekmez.

challenge icon

Görev

Orta

Düğme 2 numaralı pine, LED ise 12 numaralı pine bağlıdır. Üç durumu doldur:

  • READY: düğmeye basılınca micros() ile rastgele sayı üreteci için tohum belirle, 1000 ile 3000 ms arasında bir bekleme süresi seç, başlangıç zamanını kaydet ve WAITING durumuna geç
  • WAITING: bekleme süresi dolduğunda LED'i yak ve LIT durumuna geç
  • LIT: düğmeye basılınca LED'i söndür ve READY durumuna geç

Run'a bas, birkaç tur oyna, ardından Check'e bas.

Kendin dene

const int ledPin = 12;
const int buttonPin = 2;

// Bir turun üç durumu
enum State { READY, WAITING, LIT };
State state = READY;

int lastButton = HIGH;       // düğmenin son okunan değeri
unsigned long waitStart = 0; // beklemenin başladığı zaman
unsigned long waitTime = 0;  // bu beklemenin ne kadar süreceği

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);  // az önce basıldı
  lastButton = button;

  // READY: düğmeye basılınca bekleme başlar
  // WAITING: bekleme bitince LED'i yak
  // LIT: düğmeye basılınca LED söner ve oyun yeniden hazır olur

}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Projeler bölümündeki tüm dersler

Kendi başına pratik yap: Arduino playground