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.

Board: Arduino Uno6 komponen

Komponen yang dipakai

  • Arduino Uno
  • Breadboard (setengah)
  • LED
  • Resistor
  • Tombol tekan
  • LCD 16x2 (I2C)
  • Buzzer

Cara kerja

  1. Tekan tombol START (D10); LCD menampilkan level dan tulisan Ingat polanya!
  2. Program memainkan pola acak: LED di D2 sampai D5 menyala satu per satu, masing-masing dengan nada buzzernya sendiri.
  3. Ulangi pola itu dengan menekan 4 tombol di D6 sampai D9 sesuai urutan warna.
  4. Jawaban benar menaikkan level sampai level 5 dan LCD menulis ACCESS GRANTED; satu saja salah, permainan berakhir dengan ACCESS DENIED.

Konsep yang dipelajari

Array dan urutan (sequence)random() untuk pola acakBanyak tombol dengan INPUT_PULLUPLCD I2C dan buzzer sebagai umpan balik

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();
}

Template Arduino Uno lainnya