Menu
CoddyTech

Simon: Ulangi Polanya

Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 15 dari 24.

Setelah papan memainkan urutannya, giliranmu: ulangi empat warna dengan urutan yang sama. Sketch memerlukan satu angka lagi, step, yang menghitung berapa banyak warna yang sudah kamu ulangi. Warna yang harus kamu tekan berikutnya adalah sequence[step].

Hitung tekanan tombol saat tombol dilepas, seperti yang sudah dilakukan game untuk memulai. Saat itu, lampu dan nadanya sudah mati, dan sketch bisa merespons dengan baik:

void checkPress(int i) {
  if (i != sequence[step]) {
    Serial.println("Wrong!");
    playing = false;
    return;
  }
  step++;
  if (step == 4) {
    Serial.println("Well done!");
    playing = false;
  }
}

return langsung keluar dari fungsi, jadi setelah warna yang salah, tidak ada kode di bawahnya yang dijalankan. Mengatur playing kembali ke false mengakhiri game, dan tekanan tombol berikutnya memulai game baru.

Setiap game baru harus menghitung dari awal lagi: atur step = 0 di startGame().

challenge icon

Tantangan

Sulit

Biarkan pemain menjawab:

  • int step = 0;, atur kembali ke 0 di startGame()
  • saat tombol dilepas dan game sedang playing, panggil checkPress(i)
  • warna yang salah mencetak Wrong! dan mengakhiri game
  • setelah empat warna yang benar, cetak Well done! dan akhiri game

Mulai Serial di setup(). Tekan Jalankan, amati, ulangi polanya, lalu tekan Periksa.

Coba sendiri

// Satu entri untuk setiap warna: merah, hijau, biru, kuning
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, dan C tinggi
const int buzzerPin = 8;

int lastState[4] = {HIGH, HIGH, HIGH, HIGH};  // pembacaan terakhir setiap tombol

int sequence[4];       // warna yang dimainkan papan
bool playing = false;  // false sampai tombol ditekan untuk memulai permainan

// Nyalakan warna i dan mainkan nadanya.
void lightOn(int i) {
  digitalWrite(ledPins[i], HIGH);
  tone(buzzerPin, notes[i]);
}

// Matikan warna i dan hentikan suaranya.
void lightOff(int i) {
  digitalWrite(ledPins[i], LOW);
  noTone(buzzerPin);
}

// Mainkan urutannya: setiap warna selama 400 ms, lalu jeda 200 ms.
void playSequence() {
  delay(500);
  for (int i = 0; i < 4; i++) {
    lightOn(sequence[i]);
    delay(400);
    lightOff(sequence[i]);
    delay(200);
  }
}

// Pilih urutan acak baru dan mainkan.
void startGame() {
  randomSeed(micros());
  for (int i = 0; i < 4; i++) {
    sequence[i] = random(4);
  }
  playing = true;
  playSequence();
}

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) {  // ditekan
      lightOn(i);
    }
    if (state == HIGH && lastState[i] == LOW) {  // dilepas
      lightOff(i);
      if (playing == false) {
        startGame();
      }
    }
    lastState[i] = state;
  }
}
quiz iconUji dirimu

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

Semua pelajaran di Proyek

Latihan sendiri: Playground Arduino