#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int ledPins[] = {5, 4, 3, 2}; // Pin untuk LED
const int buttonPins[] = {12, 11, 10, 9}; // Pin untuk tombol
int sequence[100]; // Menyimpan urutan
int inputSequence[100]; // Menyimpan input pemain
int level = 1;
int score = 0;
// Inisialisasi LCD I2C: Alamat default biasanya 0x27 atau 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Matikan semua LED di awal
pinMode(buttonPins[i], INPUT_PULLUP); // Menggunakan INPUT_PULLUP untuk tombol
}
randomSeed(analogRead(0)); // Inisialisasi seed untuk random number generator
Serial.begin(9600); // Inisialisasi Serial Monitor
lcd.begin(16,20);
lcd.backlight(); // Menghidupkan backlight LCD
lcd.clear();
lcd.print("Simon Says Game");
delay(2000);
lcd.clear();
}
void loop() {
lcd.clear();
lcd.print("Level: ");
lcd.print(level);
lcd.setCursor(0, 1);
lcd.print("Score: ");
lcd.print(score);
generateSequence(level);
if (checkSequence()) {
score += level * 10; // Tambahkan skor berdasarkan level
level++;
delay(1000);
} else {
// Jika pemain salah menekan urutan
gameOver();
level = 1; // Reset ke level pertama
score = 0; // Reset skor
delay(2000);
}
}
void generateSequence(int level) {
for (int i = 0; i < level; i++) {
sequence[i] = random(0, 4);
digitalWrite(ledPins[sequence[i]], HIGH); // LED menyala pada logika HIGH
delay(500);
digitalWrite(ledPins[sequence[i]], LOW); // Matikan LED
delay(250);
}
}
bool checkSequence() {
for (int i = 0; i < level; i++) {
bool buttonPressed = false;
while (!buttonPressed) {
for (int j = 0; j < 4; j++) {
if (digitalRead(buttonPins[j]) == LOW) { // LOW karena menggunakan INPUT_PULLUP
buttonPressed = true;
inputSequence[i] = j;
if (inputSequence[i] != sequence[i]) {
return false; // Jika input tidak sesuai urutan
}
while (digitalRead(buttonPins[j]) == LOW); // Tunggu hingga tombol dilepas
}
}
}
}
return true; // Jika urutan benar
}
void gameOver() {
lcd.clear();
lcd.print("Game Over!");
lcd.setCursor(0, 1);
lcd.print("Final Score: ");
lcd.print(score);
Serial.println("Game Over!");
Serial.print("Final Score: ");
Serial.println(score);
}