Simon: Rastgele Dizi
Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 14 / 24.
Şimdi sıra tahtada. Bir düğme ilk kez bırakıldığında oyun başlar: tahta rastgele dört renk seçer, bunları bir dizide tutar ve oynatır.
random(4), 0, 1, 2 veya 3 değerini verir: bir renk. Bir for döngüsü diziyi doldurur. Tepki oyununda olduğu gibi, tohumu basma anında micros() ile ayarlayın; yoksa her oyun aynı renkleri oynatır:
randomSeed(micros());
for (int i = 0; i < 4; i++) {
sequence[i] = random(4);
}İkinci bir for döngüsü deseni oynatır: bir rengi kendi notasıyla yakar, bekler, söndürür ve tekrar bekler. İkinci bekleme önemlidir; bir renk art arda iki kez gelirse, bu bekleme olmadan kırmızı, kırmızı tek bir uzun kırmızı gibi görünür. Oyuncu artık yalnızca izliyor, bu yüzden delay() kullanmak uygundur.
for (int i = 0; i < 4; i++) {
lightOn(sequence[i]);
delay(400);
lightOff(sequence[i]);
delay(200);
}playing adlı bir bool, oyunun başladığını hatırlar; böylece oyunu yalnızca ilk basış başlatır.
Görev
OrtaPanonun bir desen çalmasını sağlayın:
int sequence[4];vebool playing = false;ekleyin- bir düğme bırakıldığında ve
playingdeğerifalseolduğunda: tohumu ayarlayın, diziyirandom(4)ile doldurun,playingdeğerinitrueyapın ve deseni çalın - desen: 500 ms bekleyin, ardından her rengi notasıyla birlikte 400 ms çalın ve sonrasında 200 ms sessizlik bırakın
Sonrasında düğmeler önceki gibi yanar ve ses çıkarır. Run'a basın, bir düğmeye basın, ardından Check'e basın.
Kendin dene
// Her renk için bir öğe: kırmızı, yeşil, mavi, sarı
const int ledPins[4] = {9, 10, 11, 12};
const int buttonPins[4] = {2, 3, 4, 5};
const int notes[4] = {262, 330, 392, 523}; // C, E, G ve tiz C
const int buzzerPin = 8;
int lastState[4] = {HIGH, HIGH, HIGH, HIGH}; // her düğmenin son okunan değeri
// i renginin ışığını yak ve notasını çal.
void lightOn(int i) {
digitalWrite(ledPins[i], HIGH);
tone(buzzerPin, notes[i]);
}
// i renginin ışığını söndür ve sesi durdur.
void lightOff(int i) {
digitalWrite(ledPins[i], LOW);
noTone(buzzerPin);
}
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
pinMode(buttonPins[i], INPUT_PULLUP);
}
}
void loop() {
for (int i = 0; i < 4; i++) {
int state = digitalRead(buttonPins[i]);
if (state == LOW && lastState[i] == HIGH) { // basıldı
lightOn(i);
}
if (state == HIGH && lastState[i] == LOW) { // bırakıldı
lightOff(i);
}
lastState[i] = state;
}
}
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