#include "LiquidCrystal_I2C.h"
// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
int buttons[4] = {2, 3, 4, 5};
#define buzzer 6
// memo Game parameters
#define levelsInGame 50
// variables to save the pattern of clicked buttons and leds
int bt_simonSaid[100];
int led_simonSaid[100];
boolean lost;
int game_play, level, mode;
// buttons arr
// Response time game parameters
unsigned long startTime;
unsigned long responseTime;
int targetButton;
void loop() {
if (mode == 0) {
MainMenu();
} else if (mode == 1) {
startMemoryGame();
} else if (mode == 2) {
startResponseTimeGame();
} else if (mode == 3) {
showPattern();
} else if (mode == 4) {
playGame();
} else if (mode == 5) {
inputSequence();
} else if (mode == 6) {
verifySequence();
} else if (mode == 7) {
gameOver();
} else if (mode == 8) {
gameWin();
} else if (mode == 9) {
playResponseTimeTest();
} else if (mode == 10) {
responseTimeTest();
}
else if (mode == 13) {
calculateAverageResponseTime();
}
}
// Initialize serial communication and call initialization function
void setup() {
Serial.begin(9600);
initialize();
}
// Display the main menu and handle user input
void MainMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1:Memory Game");
lcd.setCursor(0, 1);
lcd.print("2:Response Game");
while (true) {
for (int i = 0; i < 4; i++) {
if (digitalRead(buttons[i]) == LOW) {
delay(100); // Debounce delay
if (digitalRead(buttons[i]) == LOW) {
if (i == 0) {
mode = 1;
} else if (i == 1) {
mode = 2;
}
return;
}
}
}
}
}
void playBuzzer(int x) {
tone(buzzer, 650 + (x * 100));
delay(300);
noTone(buzzer);
}