// Define pin connections for LEDs
const int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
// Define pin connections for the 7-segment displays
const int segmentPins[] = {11, 12, 13, A0, A1, A2, A3, A4};
const int digitPins[] = {A5, A6}; // Control pins for the two digits
// Define the pin for the buzzer
const int buzzerPin = 10;
// Segment patterns for digits 0-9
const byte segmentDigits[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
// Countdown timer
int countdown = 100;
// Pattern index
int patternIndex = 0;
// Pattern delay
const int patternDelay = 500; // 500ms delay between patterns
// Time tracking
unsigned long previousMillis = 0;
unsigned long previousBuzzMillis = 0;
bool buzzerActive = false;
void setup() {
// Initialize LED pins
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Initialize segment and digit pins
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
for (int i = 0; i < 2; i++) {
pinMode(digitPins[i], OUTPUT);
}
// Initialize buzzer pin
pinMode(buzzerPin, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
// Countdown logic
if (currentMillis - previousMillis >= 1000) {
previousMillis = currentMillis;
countdown--;
if (countdown == 0) {
buzzerActive = true;
previousBuzzMillis = currentMillis;
}
updateDisplay(countdown);
}
// Buzzer logic
if (buzzerActive) {
digitalWrite(buzzerPin, HIGH);
if (currentMillis - previousBuzzMillis >= 60000) { // 1 minute buzzer
digitalWrite(buzzerPin, LOW);
buzzerActive = false;
}
} else {
digitalWrite(buzzerPin, LOW);
if (countdown > 0) {
blinkLEDs(currentMillis);
}
}
}
void updateDisplay(int number) {
int tens = number / 10;
int ones = number % 10;
// Display tens digit
digitalWrite(digitPins[0], LOW);
displayDigit(tens);
digitalWrite(digitPins[0], HIGH);
// Display ones digit
digitalWrite(digitPins[1], LOW);
displayDigit(ones);
digitalWrite(digitPins[1], HIGH);
}
void displayDigit(int digit) {
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], bitRead(segmentDigits[digit], i));
}
}
void blinkLEDs(unsigned long currentMillis) {
static unsigned long ledMillis = 0;
if (currentMillis - ledMillis >= patternDelay) {
ledMillis = currentMillis;
patternIndex = (patternIndex + 1) % 20;
updatePattern(patternIndex);
}
}
void updatePattern(int index) {
// Turn off all LEDs
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
// Patterns for blinking LEDs
switch (index) {
case 0: digitalWrite(ledPins[0], HIGH); break;
case 1: digitalWrite(ledPins[1], HIGH); break;
case 2: digitalWrite(ledPins[2], HIGH); break;
case 3: digitalWrite(ledPins[3], HIGH); break;
case 4: digitalWrite(ledPins[4], HIGH); break;
case 5: digitalWrite(ledPins[5], HIGH); break;
case 6: digitalWrite(ledPins[6], HIGH); break;
case 7: digitalWrite(ledPins[7], HIGH); break;
case 8: digitalWrite(ledPins[0], HIGH); digitalWrite(ledPins[7], HIGH); break;
case 9: digitalWrite(ledPins[1], HIGH); digitalWrite(ledPins[6], HIGH); break;
case 10: digitalWrite(ledPins[2], HIGH); digitalWrite(ledPins[5], HIGH); break;
case 11: digitalWrite(ledPins[3], HIGH); digitalWrite(ledPins[4], HIGH); break;
case 12: digitalWrite(ledPins[0], HIGH); digitalWrite(ledPins[1], HIGH); break;
case 13: digitalWrite(ledPins[1], HIGH); digitalWrite(ledPins[2], HIGH); break;
case 14: digitalWrite(ledPins[2], HIGH); digitalWrite(ledPins[3], HIGH); break;
case 15: digitalWrite(ledPins[3], HIGH); digitalWrite(ledPins[4], HIGH); break;
case 16: digitalWrite(ledPins[4], HIGH); digitalWrite(ledPins[5], HIGH); break;
case 17: digitalWrite(ledPins[5], HIGH); digitalWrite(ledPins[6], HIGH); break;
case 18: digitalWrite(ledPins[6], HIGH); digitalWrite(ledPins[7], HIGH); break;
case 19: digitalWrite(ledPins[7], HIGH); digitalWrite(ledPins[0], HIGH); break;
}
}