Simon: Urutan Acak
Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 14 dari 24.
Sekarang giliran papan. Saat tombol dilepas untuk pertama kalinya, permainan dimulai: papan memilih empat warna secara acak, menyimpannya dalam array, lalu memainkannya.
random(4) menghasilkan 0, 1, 2 atau 3: satu warna. Sebuah for loop mengisi array. Seperti pada permainan reaksi, lakukan seed dengan micros() saat tombol ditekan, atau setiap permainan akan memainkan warna yang sama:
randomSeed(micros());
for (int i = 0; i < 4; i++) {
sequence[i] = random(4);
}for loop kedua memainkan pola: nyalakan warna beserta nadanya, tunggu, matikan, lalu tunggu lagi. Jeda kedua penting saat warna yang sama muncul dua kali: tanpa jeda itu, merah, merah akan terlihat seperti satu warna merah panjang. Pemain hanya mengamati sekarang, jadi delay() tidak masalah.
for (int i = 0; i < 4; i++) {
lightOn(sequence[i]);
delay(400);
lightOff(sequence[i]);
delay(200);
}Sebuah bool bernama playing mengingat bahwa permainan sudah dimulai, jadi hanya tekanan pertama yang memulainya.
Tantangan
SedangBuat papan memainkan sebuah pola:
- tambahkan
int sequence[4];danbool playing = false; - saat sebuah tombol dilepas dan
playingbernilaifalse: lakukan seed, isi array denganrandom(4), aturplayingmenjaditrue, lalu mainkan polanya - polanya: tunggu 500 ms, lalu nyalakan setiap warna dan mainkan nadanya selama 400 ms, kemudian diam selama 200 ms
Setelah itu, tombol akan menyala dan berbunyi seperti sebelumnya. Tekan Jalankan, tekan sebuah tombol, 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
// Nyalakan warna i dan bunyikan nadanya.
void lightOn(int i) {
digitalWrite(ledPins[i], HIGH);
tone(buzzerPin, notes[i]);
}
// Matikan warna i dan hentikan bunyinya.
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) { // ditekan
lightOn(i);
}
if (state == HIGH && lastState[i] == LOW) { // dilepas
lightOff(i);
}
lastState[i] = state;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Proyek
Latihan sendiri: Playground Arduino