#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD dapat berbeda, disesuaikan dengan LCD yang Anda miliki
const int coinAcceptorPin = 3;
const int relayPin = 10;
const int buttonPin = 7;
int coinValue = 0;
unsigned long startTime = 0;
unsigned long gameDuration = 0;
bool gameStarted = false;
bool coinInsertedFlag = false;
void setup() {
Serial.begin(9600); // Mulai komunikasi serial
pinMode(coinAcceptorPin, INPUT);
pinMode(relayPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("BRAIN GAMES");
lcd.setCursor(0, 1);
lcd.print("by Gusti Suasmika");
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan koin");
}
void loop() {
if (!gameStarted) {
checkCoinInsertion();
} else {
playGame();
}
}
void checkCoinInsertion() {
int coinInserted = digitalRead(coinAcceptorPin);
if (coinInserted == HIGH) {
if (!coinInsertedFlag) {
coinInsertedFlag = true;
startTime = millis();
}
coinValue += 20; // Menambahkan waktu bermain (detik) untuk setiap koin yang dimasukkan
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Koin diterima");
lcd.setCursor(0, 1);
lcd.print("Total: " + String(coinValue / 20) + " koin");
delay(2000);
Serial.println("Koin diterima, Total koin: " + String(coinValue / 20));
} else if (coinInsertedFlag && millis() - startTime >= 2000) {
// Jika tidak ada koin masuk dalam 2 detik, maka koin dianggap selesai dimasukkan
coinInsertedFlag = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Koin selesai");
delay(100);
Serial.println("Koin selesai dimasukkan");
}
if (!coinInsertedFlag && digitalRead(buttonPin) == LOW) {
gameStarted = true;
digitalWrite(relayPin, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selamat Bermain");
Serial.println("Game dimulai");
}
}
void playGame() {
unsigned long currentTime = millis();
gameDuration = (currentTime - startTime) / 1000;
lcd.setCursor(0, 1);
lcd.print("Sisa waktu: " + String(coinValue - gameDuration) + " detik");
if (coinValue - gameDuration <= 0) {
digitalWrite(relayPin, LOW);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Terimakasih, Besok");
lcd.setCursor(0, 1);
lcd.print("Kesini Lagi Ya..");
delay(2000);
Serial.println("Game selesai");
// Reset game
coinValue = 0;
gameStarted = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan koin");
}
}