Cara Membuat Game Simon (Memory Hacker) dengan Arduino — Simulasi Online
Memory Hacker adalah game ingatan ala Simon: empat LED berwarna menyala bergantian membentuk pola sambil buzzer membunyikan nada berbeda untuk tiap warna. Tugasmu mengulangi polanya dengan empat tombol, dari level 1 sampai level 5, dengan status permainan tampil di LCD.
Komponen yang dipakai
- Arduino Uno
- Breadboard (setengah)
- LED
- Resistor
- Tombol tekan
- LCD 16x2 (I2C)
- Buzzer
Cara kerja
- Tekan tombol START (D10); LCD menampilkan level dan tulisan Ingat polanya!
- Program memainkan pola acak: LED di D2 sampai D5 menyala satu per satu, masing-masing dengan nada buzzernya sendiri.
- Ulangi pola itu dengan menekan 4 tombol di D6 sampai D9 sesuai urutan warna.
- Jawaban benar menaikkan level sampai level 5 dan LCD menulis ACCESS GRANTED; satu saja salah, permainan berakhir dengan ACCESS DENIED.
Konsep yang dipelajari
Kode program
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int led[] = {2, 3, 4, 5};
const int tombol[] = {6, 7, 8, 9};
const int startButton = 10;
const int buzzer = 11;
int urutan[5];
int bacaTombol() {
while (true) {
for (int i = 0; i < 4; i++) {
if (digitalRead(tombol[i]) == LOW) {
delay(25);
if (digitalRead(tombol[i]) == LOW) {
while (digitalRead(tombol[i]) == LOW) {
delay(5);
}
return i;
}
}
}
}
}
void nyalakanLED(int warna) {
digitalWrite(led[warna], HIGH);
tone(buzzer, 400 + warna * 150, 150);
delay(350);
digitalWrite(led[warna], LOW);
noTone(buzzer);
delay(150);
}
void tungguStart() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MEMORY HACKER");
lcd.setCursor(0, 1);
lcd.print("Tekan START");
while (digitalRead(startButton) == HIGH) {
delay(10);
}
delay(30);
while (digitalRead(startButton) == LOW) {
delay(10);
}
}
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(led[i], OUTPUT);
pinMode(tombol[i], INPUT_PULLUP);
}
pinMode(startButton, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
lcd.init();
lcd.backlight();
randomSeed(analogRead(A0));
tungguStart();
}
void loop() {
for (int level = 1; level <= 5; level++) {
urutan[level - 1] = random(0, 4);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Level ");
lcd.print(level);
lcd.setCursor(0, 1);
lcd.print("Ingat polanya!");
delay(800);
for (int i = 0; i < level; i++) {
nyalakanLED(urutan[i]);
}
lcd.clear();
lcd.print("Giliran kamu!");
for (int i = 0; i < level; i++) {
int jawaban = bacaTombol();
nyalakanLED(jawaban);
if (jawaban != urutan[i]) {
lcd.clear();
lcd.print("ACCESS DENIED!");
lcd.setCursor(0, 1);
lcd.print("GAME OVER");
tone(buzzer, 200, 700);
delay(1800);
tungguStart();
return;
}
}
lcd.clear();
lcd.print("Benar!");
lcd.setCursor(0, 1);
lcd.print("Level selesai");
tone(buzzer, 900, 150);
delay(1000);
}
lcd.clear();
lcd.print("ACCESS GRANTED!");
lcd.setCursor(0, 1);
lcd.print("SYSTEM HACKED!");
tone(buzzer, 1200, 500);
delay(2500);
tungguStart();
}