const int segmentPins[] = {6, 7, 8, 9, 10, 11, 12}; // A, B, C, D, E, F, G
const int digitPins[] = {2, 3, 4, 5}; // D1, D2, D3, D4 (Common pins)
// 7-segment encoding for digits 0-9 (common cathode)
const byte digitMap[10] = {
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111 // 9
};
// Timer variables
unsigned long lastUpdateTime;
int remainingSeconds = 10 * 60 * 60; // 10 hours in seconds
void setup() {
Serial.begin(9600); // For debugging
// Initialize segment pins
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], LOW); // All segments off initially
}
// Initialize digit pins
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], HIGH); // All digits off initially
}
lastUpdateTime = millis(); // Record the start time
}
void loop() {
// Update the countdown every second
if (millis() - lastUpdateTime >= 1000) {
lastUpdateTime += 1000; // Advance by 1 second
if (remainingSeconds > 0) {
remainingSeconds--; // Decrement time
}
}
// Debugging: Print remaining time to Serial Monitor
Serial.print("Remaining Time: ");
Serial.println(remainingSeconds);
// Calculate hours and minutes
int hours = remainingSeconds / 3600;
int minutes = (remainingSeconds % 3600) / 60;
// Debugging: Print hours and minutes
Serial.print("Hours: ");
Serial.println(hours);
Serial.print("Minutes: ");
Serial.println(minutes);
// Convert hours and minutes into individual digits
int digit1 = hours / 10; // Tens of hours
int digit2 = hours % 10; // Units of hours
int digit3 = minutes / 10; // Tens of minutes
int digit4 = minutes % 10; // Units of minutes
// Display digits
displayDigit(digit1, 0); // First digit (D1)
displayDigit(digit2, 1); // Second digit (D2)
displayDigit(digit3, 2); // Third digit (D3)
displayDigit(digit4, 3); // Fourth digit (D4)
}
// Function to display a digit on a specific position
void displayDigit(int digit, int position) {
// Turn off all digits
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH); // Turn off all digits
}
// Set segments for the desired digit
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], bitRead(digitMap[digit], i));
}
// Enable the desired digit
digitalWrite(digitPins[position], LOW);
// Short delay for persistence of vision
delay(5);
}