#include <TM1637Display.h>
#define CLK 2 // Define CLK pin
#define DIO 3 // Define DIO pin
TM1637Display display(CLK, DIO);
#define PLAYER1_BUTTON 4
#define PLAYER2_BUTTON 5
#define RESET_BUTTON 6
//#define BUZZER_PIN 7
unsigned long player1Time = 300;
unsigned long startTime;
unsigned long player2Time = 300;
bool player1Turn = true;
void setup() {
Serial.begin(115200);
pinMode(PLAYER1_BUTTON, INPUT);
pinMode(PLAYER2_BUTTON, INPUT);
pinMode(RESET_BUTTON, INPUT);
// Set up other pin modes for buzzer if needed
startTime = millis(); // Record the starting time
display.setBrightness(7);
}
void loop() {
if (digitalRead(PLAYER1_BUTTON) == LOW && !player1Turn) {
player2Time += millis() - player1Time;
player1Turn = true;
Serial.println("1");
// Provide feedback with the buzzer if needed
}
if (digitalRead(PLAYER2_BUTTON) == LOW && player1Turn) {
player1Time += millis() - player1Time;
player1Turn = false;
Serial.println("2");
// Provide feedback with the buzzer if needed
}
if (digitalRead(RESET_BUTTON) == LOW) {
player1Time = 60;
player2Time = 60;
player1Turn = true;
Serial.println("hi");
// Provide feedback with the buzzer if needed
}
displayTime(player1Time, 0); // Display player 1 time
delay(1000); // Optional: add delay to make it easier to read
displayTime(player2Time, 1); // Display player 2 time
delay(1000); // Optional: add delay to make it easier to read
}
void displayTime(unsigned long time, int player) {
unsigned long elapsedTime = (millis() - startTime) / 1000; // Calculate elapsed time in seconds
if (elapsedTime <= player1Time) {
unsigned long remainingTime = player1Time - elapsedTime;
// Display remaining time in Minutes:Seconds format
unsigned int minutes = remainingTime / 60;
unsigned int seconds = remainingTime % 60;
display.showNumberDecEx(minutes * 100 , 0b01000000, true);
if (remainingTime == 0) {
// Start blinking when countdown reaches 00:00
while (true) {
display.showNumberDecEx(0, 0b01000000, true); // Display "00:00"
delay(500);
display.clear(); // Clear the display
delay(500);
}
}
}
delay(1000);
}