#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
const int buttonPin = 2;
const int ledMerah = 12;
const int ledHijau = 13;
const int buzzerPin = 8; // Pin untuk buzzer
int angkaTebakan[3] = {22, 33, 44}; // Array untuk menyimpan 3 angka rahasia (3 level permainan)
int currentLevel = 0; // Level permainan saat ini
int kesempatan = 5;
int buttonState = 0;
int lastButtonState = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
String inputBuffer = "";
// Array untuk menyimpan riwayat tebakan
int tebakanHistory[5]; // Array untuk menyimpan hingga 5 tebakan terakhir
int indexTebakan = 0; // Untuk melacak jumlah tebakan yang sudah dilakukan
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledMerah, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(buzzerPin, OUTPUT); // Set buzzer sebagai output
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tebak Angka 1-100!");
Serial.println("Selamat datang di The Great Arduino Number Guessing Challenge!");
Serial.println("Tebak angka antara 1 hingga 100.");
Serial.println("Masukkan tebakan Anda dan tekan tombol untuk memvalidasi!");
}
void loop() {
int reading = digitalRead(buttonPin);
if (Serial.available() > 0) {
char inChar = Serial.read();
if (isDigit(inChar)) {
inputBuffer += inChar;
}
}
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW && inputBuffer.length() > 0) {
int tebakan = inputBuffer.toInt();
inputBuffer = ""; // Reset buffer
if (tebakan > 0 && tebakan <= 100) {
kesempatan--;
// Menyimpan tebakan ke dalam array history
if (indexTebakan < 5) {
tebakanHistory[indexTebakan] = tebakan;
indexTebakan++;
}
Serial.print("Tebakan Anda: ");
Serial.println(tebakan);
lcd.clear();
if (tebakan == angkaTebakan[currentLevel]) {
Serial.println("Selamat! Tebakan Anda benar!");
digitalWrite(ledHijau, HIGH);
digitalWrite(ledMerah, LOW);
tone(buzzerPin, 1000, 500); // Buzzer berbunyi nada 1000Hz selama 500ms
lcd.setCursor(0, 0);
lcd.print("Tebakan Benar!");
currentLevel++; // Naik ke level berikutnya
if (currentLevel >= 3) { // Jika sudah selesai semua level
Serial.println("Anda telah menyelesaikan semua level!");
lcd.setCursor(0, 1);
lcd.print("Game Selesai!");
return;
} else {
lcd.setCursor(0, 1);
lcd.print("Lanjut Level ");
lcd.print(currentLevel + 1);
}
return;
} else if (tebakan < angkaTebakan[currentLevel]) {
Serial.println("Tebakan terlalu kecil!");
lcd.setCursor(0, 0);
lcd.print("Terlalu kecil!");
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
tone(buzzerPin, 500, 500); // Buzzer berbunyi nada 500Hz selama 500ms
} else {
Serial.println("Tebakan terlalu besar!");
lcd.setCursor(0, 0);
lcd.print("Terlalu besar!");
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
tone(buzzerPin, 500, 500); // Buzzer berbunyi nada 500Hz selama 500ms
}
if (kesempatan == 0) {
Serial.println("Maaf, kesempatan Anda habis!");
Serial.print("Angka yang benar adalah: ");
Serial.println(angkaTebakan[currentLevel]);
lcd.setCursor(0, 1);
lcd.print("Game Over!");
tone(buzzerPin, 300, 1000); // Buzzer berbunyi nada 300Hz selama 1 detik untuk menandakan game over
return;
} else {
Serial.print("Sisa kesempatan: ");
Serial.println(kesempatan);
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
lcd.print(kesempatan);
}
} else {
Serial.println("Mohon masukkan angka antara 1 dan 100.");
}
// Clear any remaining characters in the serial buffer
while (Serial.available() > 0) {
Serial.read();
}
}
}
}
lastButtonState = reading;
}