#include <TM1637Display.h>
#include <pitches.h>
const int leds[] = {4, 5, 19, 16, 0, 15, 2};
const int push_buttons[] = {33, 32, 34, 27, 14, 12, 13};
const int clk = 6;
const int dig = 17;
const int buzzer = 18;
TM1637Display display(clk, dig);
// Game score
int score = 0;
int moleinterval = 500;
int moleindex = -1;
unsigned long lastMoleTime = 0;
int turns = 0;
int level = 0;
int i=1;
const int buttonTone = NOTE_E4;
void setup() {
Serial.begin(9600);
for (int i = 0; i < 7; i++) {
pinMode(leds[i], OUTPUT);
pinMode(push_buttons[i], INPUT_PULLUP);
}
pinMode(buzzer, OUTPUT);
display.setBrightness(0x0f);
}
void loop() {
unsigned long currentTime = millis();
if (i>3) {
i=3;
}
setLevel(i);
if (turns < 10) {
if (currentTime - lastMoleTime >= moleinterval) {
if (moleindex != -1) {
digitalWrite(leds[moleindex], LOW);
}
moleindex = random(0, 7); // Selecting a random LED to glow
digitalWrite(leds[moleindex], HIGH);
lastMoleTime = currentTime;
}
// Checking if button is pressed
for (int i = 0; i < 7; i++) {
if (digitalRead(push_buttons[i]) == LOW) {
if (i == moleindex) {
moleindex = -1;
digitalWrite(leds[i], LOW);
score++;
lastMoleTime = currentTime;
tone(buzzer, buttonTone);
delay(100);
noTone(buzzer);
}
}
}
display.showNumberDec(score, true);
turns++;
} else {
turns = 0; // Reset turns for the next round
i++;
}
}
void setLevel(int level) {
if (level == 1) {
moleinterval = 750;
} else if (level == 2) {
moleinterval = 500;
} else if (level == 3) {
moleinterval = 300;
} else {
moleinterval = 1000; // Default interval
}
}