#include <TM1637Display.h>
// Define the pins for the 4-digit display (TM1637 module)
#define CLK 2
#define DIO 3
// Create an instance of the display
TM1637Display display(CLK, DIO);
// Define pins for red, yellow, and green LEDs
#define RED_LED 4
#define YELLOW_LED 5
#define GREEN_LED 6
// Define the time intervals for each light
#define GREEN_LIGHT_DURATION 5000 // 5 seconds
#define YELLOW_LIGHT_DURATION 3000 // 3 seconds
#define RED_LIGHT_DURATION 7000 // 7 seconds
unsigned long previousMillis = 0;
int light = 1;
int remainingTime = 0;
void setup() {
// Set pins as OUTPUT
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
// Initialize the 4-digit display
display.setBrightness(7); // Adjust the brightness (0-7)
}
void loop() {
unsigned long currentMillis = millis();
switch (light) {
case 1: // Green light
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
if (remainingTime > 0) {
if (currentMillis - previousMillis >= 1000) {
remainingTime--;
previousMillis = currentMillis;
}
} else {
light = 2; // Switch to yellow light
remainingTime = 3;
previousMillis = currentMillis;
}
break;
case 2: // Yellow light
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
if (remainingTime > 0) {
if (currentMillis - previousMillis >= 1000) {
remainingTime--;
previousMillis = currentMillis;
}
} else {
light = 3; // Switch to red light
remainingTime = 7;
previousMillis = currentMillis;
}
break;
case 3: // Red light
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, LOW);
if (remainingTime > 0) {
if (currentMillis - previousMillis >= 1000) {
remainingTime--;
previousMillis = currentMillis;
}
} else {
light = 1; // Switch to green light
remainingTime = 5;
previousMillis = currentMillis;
}
break;
}
// Display the remaining time on the 4-digit display
display.showNumberDecEx(remainingTime, 0b01000000, true);
}