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.
Görev
OrtaDüğme 2 numaralı pine, LED ise 12 numaralı pine bağlıdır. Üç durumu doldur:
READY: düğmeye basılıncamicros()ile rastgele sayı üreteci için tohum belirle, 1000 ile 3000 ms arasında bir bekleme süresi seç, başlangıç zamanını kaydet veWAITINGdurumuna geçWAITING: bekleme süresi dolduğunda LED'i yak veLITdurumuna geçLIT: düğmeye basılınca LED'i söndür veREADYdurumuna 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
}
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
2Tepki Oyunu
Tepki Oyunu: Rastgele BeklemeTepki Oyunu: ZamanlayıcıTepki Oyunu: Erken BaşlangıçTepki Oyunu: En İyi SüreKendi başına pratik yap: Arduino playground