int red = A0;
int yellow = A1;
int green = A2;
int yellowTime = .5; //Means 20 sec, 0 means 10 sec
int redTime = 9; //Means 60 sec
int greenTime = 2;
void setup()
{
for (int i = 0; i <= 13; i++) {
pinMode(i, OUTPUT); //Set all pins from 0 to 13 as OUTPUT
}
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
}
//The line below is the array containing all the binary numbers for the digits on a SSD from 0 to 9
const int number[11] = {0b0111111, 0b0000110, 0b1011011,
0b1001111, 0b1100110, 0b1101101,
0b1111101, 0b0000111, 0b1111111,
0b1101111};
void loop()
{
Red();
Green();
}
void display(const int from)
{
for (int tens = from; tens >= 0; tens--)
{
display_tens(tens);
}
}
void display_tens(const int tens)
{
int pin1, a, ones;
//pin1 is just used to deal with pins of the 1st SSD which desplays the tens digit
for (pin1 = 0, a = 0; pin1 < 7; pin1++, a++)
{
digitalWrite(pin1, bitRead(number[tens], a));
}
for (ones = 10; ones >= 0; ones--)
{
display_ones(ones);
delay(200);
//I have given a delay of 1 seconds. You can put your own Time!!
}
}
void display_ones(const int x)
{
int pin2, b;
//pin2 is just used to deal with pins of the 2nd SSD which desplays the ones digit
for (pin2 = 7, b = 0; pin2 <= 13; pin2++, b++)
{
digitalWrite(pin2, bitRead(number[x], b));
}
}
void Red()
{
digitalWrite(red, HIGH);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
display(redTime);
digitalWrite(red, HIGH);
digitalWrite(yellow, HIGH);
digitalWrite(green, LOW);
display(yellowTime);
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
}
void Green()
{
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, HIGH);
display(greenTime);
digitalWrite(red, LOW);
digitalWrite(yellow, HIGH);
digitalWrite(green, HIGH);
display(yellowTime);
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
}
// Define pins for seven segment display
const int digit1Pin = 2;
const int digit2Pin = 3;
const int segA = 4;
const int segB = 5;
const int segC = 6;
const int segD = 7;
const int segE = 8;
const int segF = 9;
const int segG = 10;
// Define timings for traffic light states
const int greenDuration = 5000; // 5 seconds
const int yellowDuration = 2000; // 2 seconds
const int redDuration = 5000; // 5 seconds
// Function to display a digit on seven segment display
void displayDigit(int digit) {
switch (digit) {
case 0:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
break;
// Define cases for digits 1-9
}
}
void setup() {
// Set pins as outputs
pinMode(digit1Pin, OUTPUT);
pinMode(digit2Pin, OUTPUT);
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
}
void loop() {
// Green light
digitalWrite(digit1Pin, HIGH);
digitalWrite(digit2Pin, LOW);
displayDigit(0); // Display '0' for green light
delay(greenDuration);
// Yellow light
digitalWrite(digit1Pin, LOW);
digitalWrite(digit2Pin, HIGH);
displayDigit(1); // Display '1' for yellow light
delay(yellowDuration);
// Red light
digitalWrite(digit1Pin, HIGH);
digitalWrite(digit2Pin, HIGH);
displayDigit(2); // Display '2' for red light
delay(redDuration);
}