0% found this document useful (0 votes)
12 views17 pages

Arduino Traffic Light Control Code

The document defines pin assignments for controlling 7-segment displays to display countdown timers on four different roads. It initializes the pin modes, defines functions to control each display, and contains the main loop that controls the displays based on input from infrared sensors to determine traffic and change the countdown timers accordingly.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views17 pages

Arduino Traffic Light Control Code

The document defines pin assignments for controlling 7-segment displays to display countdown timers on four different roads. It initializes the pin modes, defines functions to control each display, and contains the main loop that controls the displays based on input from infrared sensors to determine traffic and change the countdown timers accordingly.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

#define R1 13

#define Y1 12
#define G1 11
#define R2 10
#define Y2 9
#define G2 8
#define R3 7
#define Y3 6
#define G3 5
#define R4 4
#define Y4 3
#define G4 2

//Prepare binary array for all 7 segment to turn on 7 segment at position of


a,b,c,d,e,f,g
int digit[10] = {0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101,
0b1111101, 0b0000111, 0b1111111, 0b1101111};

int digit1, digit2; // initialize individual digit to controll each segment

void dis(int num)


{
for (int i = 22; i < 29; i++)
{
digitalWrite(i, bitRead(digit[num], i - 22));
}
}

void dis2(int num)


{
for (int i = 40; i < 47; i++)
{
digitalWrite(i, bitRead(digit[num], i - 40));
}
}

void dis3(int num)


{
for (int i = 49; i < 54; i++)
{
digitalWrite(i, bitRead(digit[num], i - 49));
}
int i=54;
digitalWrite(A8,bitRead(digit[num],i-49));
i++;
digitalWrite(A9,bitRead(digit[num],i-49));
}

void dis1(int num)


{
for (int i = 31; i < 38; i++)
{
digitalWrite(i, bitRead(digit[num], i - 31));
}
}

void setup()
{

int a;
int b;
int c;
int d;
pinMode(R1,OUTPUT);
pinMode(Y1,OUTPUT);
pinMode(G1,OUTPUT);

pinMode(R2,OUTPUT);
pinMode(Y2,OUTPUT);
pinMode(G2,OUTPUT);

pinMode(R3,OUTPUT);
pinMode(Y3,OUTPUT);
pinMode(G3,OUTPUT);

pinMode(R4,OUTPUT);
pinMode(Y4,OUTPUT);
pinMode(G4,OUTPUT);

pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(A3,INPUT);
pinMode(A4,INPUT);
pinMode(A5,INPUT);
pinMode(A6,INPUT);
pinMode(A7,INPUT);

for (int i = 22; i < 29; i++)


{
pinMode(i, OUTPUT); // declare 0-9 th pin as output
}
pinMode(29, OUTPUT); //declare 7 seg Digit1 pin as output
pinMode(30, OUTPUT);//declare 7 seg Digit2 pin as output

for (int i = 40; i < 47; i++)


{
pinMode(i, OUTPUT); // declare 0-9 th pin as output
}
pinMode(48, OUTPUT); //declare 7 seg Digit1 pin as output
pinMode(47, OUTPUT);//declare 7 seg Digit2 pin as output

for (int i = 49; i < 54; i++)


{
pinMode(i, OUTPUT); // declare 0-9 th pin as output
}
pinMode(A8, OUTPUT);
pinMode(A9, OUTPUT);
pinMode(A10, OUTPUT);
pinMode(A11, OUTPUT);

for (int i = 31; i < 38; i++)


{
pinMode(i, OUTPUT); // declare 0-9 th pin as output
}
pinMode(39, OUTPUT); //declare 7 seg Digit1 pin as output
pinMode(38, OUTPUT);//declare 7 seg Digit2 pin as output

pinMode(19,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(19),ambulance,LOW);

}
void loop()
{
road1();
}
void road1()
{
int IR1=analogRead(A6);
int IR2=analogRead(A7);
if(IR1<=60 && IR2<=60)
{

digitalWrite(G1,HIGH);
digitalWrite(R1,LOW);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);

for (int j = 90; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y2,HIGH);
digitalWrite(R2, LOW);
}
digit2 = j / 10;
digit1 = j % 10;
for ( int k = 0; k < 35; k++)// For loop to control the digit control to print
00-99
{
digitalWrite(30, HIGH);
digitalWrite(29, LOW);
dis(digit2);
delay(10);

digitalWrite(29, HIGH);
digitalWrite(30, LOW);
dis(digit1);
delay(15);
}
}
road2();
}

else if (IR1<=60 && IR2>60)


{

digitalWrite(G1,HIGH);
digitalWrite(R1,LOW);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);
for (int j = 60; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y2,HIGH);
digitalWrite(R2, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(30, HIGH);
digitalWrite(29, LOW);
dis(digit2);
delay(10);

digitalWrite(29, HIGH);
digitalWrite(30, LOW);
dis(digit1);
delay(15);
}
}
road2();
}

else if (IR1>60 && IR2>60)


{

digitalWrite(G1,HIGH);
digitalWrite(R1,LOW);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);
for (int j = 30; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y2,HIGH);
digitalWrite(R2, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(30, HIGH);
digitalWrite(29, LOW);
dis(digit2);
delay(10);

digitalWrite(29, HIGH);
digitalWrite(30, LOW);
dis(digit1);
delay(15);
}
}
road2();
}
}

void road2()
{

int IR3=analogRead(A0);
int IR4=analogRead(A1);
int b;
int a=b;

if(IR3<=60 && IR4<=60)


{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,LOW);
digitalWrite(Y2,LOW);
digitalWrite(G2,HIGH);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);

for (int j = 90; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y3,HIGH);
digitalWrite(R3, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(39, HIGH);
digitalWrite(38, LOW);
dis1(digit2);
delay(10);

digitalWrite(38, HIGH);
digitalWrite(39, LOW);
dis1(digit1);
delay(15);
}
}
road3();
}

else if(IR3<=60 && IR4>60)


{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,LOW);
digitalWrite(Y2,LOW);
digitalWrite(G2,HIGH);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);
for (int j = 60; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y3,HIGH);
digitalWrite(R3, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(39, HIGH);
digitalWrite(38, LOW);
dis1(digit2);
delay(10);

digitalWrite(38, HIGH);
digitalWrite(39, LOW);
dis1(digit1);
delay(15);
}
}
road3();
}

else if(IR3>60 && IR4>60)


{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,LOW);
digitalWrite(Y2,LOW);
digitalWrite(G2,HIGH);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);

for (int j = 30; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y3,HIGH);
digitalWrite(R3, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(39, HIGH);
digitalWrite(38, LOW);
dis1(digit2);
delay(10);

digitalWrite(38, HIGH);
digitalWrite(39, LOW);
dis1(digit1);
delay(15);
}
}
road3();
}
}
void road3()
{

int IR5=analogRead(A2);
int IR6=analogRead(A3);
int c;
int a=c;
if (IR5<=60 && IR6<=60)
{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,LOW);
digitalWrite(Y3,LOW);
digitalWrite(G3,HIGH);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);

for (int j = 90; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y4,HIGH);
digitalWrite(R4, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(47, HIGH);
digitalWrite(48, LOW);
dis2(digit2);
delay(10);

digitalWrite(48, HIGH);
digitalWrite(47, LOW);
dis2(digit1);
delay(15);
}
}
road4();
}

else if (IR5<=60 && IR6>60)


{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,LOW);
digitalWrite(Y3,LOW);
digitalWrite(G3,HIGH);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);

for (int j = 60; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y4,HIGH);
digitalWrite(R4, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(47, HIGH);
digitalWrite(48, LOW);
dis2(digit2);
delay(10);

digitalWrite(48, HIGH);
digitalWrite(47, LOW);
dis2(digit1);
delay(15);
}
}
road4();
}

else if(IR5>60 && IR6>60)


{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,LOW);
digitalWrite(Y3,LOW);
digitalWrite(G3,HIGH);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);

for (int j = 30; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y4,HIGH);
digitalWrite(R4, LOW);
}
digit2 = j / 10;
digit1 = j % 10;
for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(47, HIGH);
digitalWrite(48, LOW);
dis2(digit2);
delay(10);

digitalWrite(48, HIGH);
digitalWrite(47, LOW);
dis2(digit1);
delay(15);
}
}
road4();
}
}

void road4() {

int IR7=analogRead(A4);
int IR8=analogRead(A5);
int d;
int a=d;
if(IR7<=60 && IR8<=60)
{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,LOW);
digitalWrite(Y4,LOW);
digitalWrite(G4,HIGH);
delay(20);

for (int j = 90; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y1,HIGH);
digitalWrite(R1, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(A10, HIGH);
digitalWrite(A11, LOW);
dis3(digit2);
delay(10);

digitalWrite(A11, HIGH);
digitalWrite(A10, LOW);
dis3(digit1);
delay(15);
}
}
road1();
}

else if(IR7<=60 && IR8>60)


{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,LOW);
digitalWrite(Y4,LOW);
digitalWrite(G4,HIGH);
delay(20);

for (int j = 60; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y1,HIGH);
digitalWrite(R1, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(A10, HIGH);
digitalWrite(A11, LOW);
dis3(digit2);
delay(10);

digitalWrite(A11, HIGH);
digitalWrite(A10, LOW);
dis3(digit1);
delay(15);
}
}
road1();
}

else if(IR7>60 && IR8>60)


{

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,LOW);
digitalWrite(Y4,LOW);
digitalWrite(G4,HIGH);
delay(20);

for (int j = 30; j>=0; j--)// for lopp to pass value from 00-99
{
if(j==10)
{
digitalWrite(Y1,HIGH);
digitalWrite(R1, LOW);
}
digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(A10, HIGH);
digitalWrite(A11, LOW);
dis3(digit2);
delay(10);
digitalWrite(A11, HIGH);
digitalWrite(A10, LOW);
dis3(digit1);
delay(15);
}
}
road1();
}
}

void ambulance()
{

run();

void run()
{
int a;
int b;
int c;
int d;
if (a==b)
{
for (int j = 20; j>=0; j--)// for lopp to pass value from 00-99
{

digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(39, HIGH);
digitalWrite(38, LOW);
dis1(digit2);
delay(10);

digitalWrite(38, HIGH);
digitalWrite(39, LOW);
dis1(digit1);
delay(15);
}
}
digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
}

else if (a==c)
{
for (int j = 20; j>=0; j--)// for lopp to pass value from 00-99
{

digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(47, HIGH);
digitalWrite(48, LOW);
dis2(digit2);
delay(10);

digitalWrite(48, HIGH);
digitalWrite(47, LOW);
dis2(digit1);
delay(15);
}
}
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
}

else if (a==d)
{

for (int j = 20; j>=0; j--)// for lopp to pass value from 00-99
{

digit2 = j / 10;
digit1 = j % 10;

for ( int k = 0; k < 35; k++)// For loop to control the digit control to
print 00-99
{
digitalWrite(A10, HIGH);
digitalWrite(A11, LOW);
dis3(digit2);
delay(10);

digitalWrite(A11, HIGH);
digitalWrite(A10, LOW);
dis3(digit1);
delay(15);
}
}
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);

int s=analogRead(A13);

while(s<=500)
{

digitalWrite(G1,HIGH);
digitalWrite(R1,LOW);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(R2,HIGH);
digitalWrite(Y2,LOW);
digitalWrite(G2,LOW);
delay(20);
digitalWrite(R3,HIGH);
digitalWrite(Y3,LOW);
digitalWrite(G3,LOW);
delay(20);
digitalWrite(R4,HIGH);
digitalWrite(Y4,LOW);
digitalWrite(G4,LOW);
delay(20);
s=analogRead(A13);
delay(20);

digitalWrite(G1,LOW);
digitalWrite(R1,HIGH);
digitalWrite(Y1,LOW);
delay(20);

digitalWrite(G2,HIGH);
digitalWrite(R2,LOW);
digitalWrite(Y2,LOW);
delay(20);

Common questions

Powered by AI

Sequential non-overlapping traffic light changes are achieved through logical condition checks and carefully structured delays within each `road` function. The program evaluates IR sensor conditions to set green lights for one specific road and red for others before engaging a countdown loop . As each road's cycle completes, the system transitions to the next road (e.g., from road1 to road2) without overlap by consistently maintaining a delay period (20 milliseconds at each light change). The entire process loops through roads by invoking functions like road2(), road3(), etc. This ensures that no two roads have conflicting green light signals simultaneously .

The function `road2` uses the readings from IR sensors (IR3 and IR4) to determine the traffic light configuration. If both IR3 and IR4 readings are less than or equal to 60, road 2 gets a green light, and a countdown from 90 to 0 seconds starts with the use of a 7-segment display . If IR3 is less than or equal to 60 and IR4 greater than 60, the countdown starts from 60 seconds instead. If both sensors read greater than 60, the countdown starts from 30 seconds . Throughout each countdown condition, other roads remain on red, and the control transitions to the next road check, `road3` .

In this system, interrupts are set up through the `attachInterrupt` function, which links digital pin 19 to the `ambulance` function using `LOW` as a trigger mode . This setup ensures that when a specified condition (such as the presence of an ambulance) occurs, the `ambulance` function is immediately executed, overriding the regular loop operation to provide the ambulance with priority access through the traffic system . Interrupts serve to manage unexpected or high-priority events without waiting for the entire loop to cycle through, which is crucial for real-time systems like traffic management .

The variable `a` serves as an intermediary state or placeholder within functions like `road2`, `road3`, and `road4`. It is assigned values from other variables representing sensor readings (`b`, `c`, `d`), effectively acting as a placeholder to trigger specific traffic control sequences . This setup simplifies logic pathways by allowing quick comparisons to influence which countdown sequence initiates based on road status, ensuring efficient traffic transition conditions for each `road` function . Thus, `a` helps manage decision paths, such as the activation of specific road countdowns or light changes on condition fulfillment.

The document uses IR sensor readings (IR1 to IR8) to determine the state changes in traffic lights. The logic conditions compare these analog readings against a threshold of 60. For instance, if IR1 and IR2 are both below or equal to 60, the green light for road 1 is turned on, and the red lights for other roads are activated sequentially . If IR1 is less than or equal to 60 and IR2 is greater than 60, a countdown begins for road 1 with alterations in the traffic light state and other roads, often switching reds to greens depending on sensor conditions .

The setup function configures the system by assigning pin modes for both input and output. Output pins (R1 to R4, Y1 to Y4, G1 to G4) are used to control the traffic lights for four roads . Additional output pins are assigned for controlling the 7-segment displays that show countdown timers (pins 22 to 54, 29, 30, and A8 to A11). Input pins (A0 to A7) are linked to sensors to detect traffic conditions through analog readings, and pin 19 is set with an interrupt to respond to ambulance detection .

The countdown display logic for `road1` is implemented using two separate loops. The first loop decrements a counter variable 'j' which represents total seconds remaining, split into tens (digit2) and ones (digit1) places . For each decrement, the nested loop activates the appropriate segments of a 7-segment LED display using the `dis` and `dis1` functions. These functions translate the numerical value of `digit1` and `digit2` into binary signals that light up specific segments . This display provides visual feedback to drivers by indicating how many seconds remain until the light changes, allowing them to prepare for the transition .

The `dis` and `dis1` functions are designed to control different 7-segment displays. The `dis` function controls the display for the left digit by iterating over pin numbers 22 to 29, activating each segment that corresponds to the binary pattern of a specified number from the `digit` array . Each segment of these displays is controlled by its respective bit set either high or low to form numerals. Similarly, `dis1` controls the right digit by working with pins 31 to 38 . This system allows variable numbers to be represented on the displays, providing real-time countdown feedback .

IR sensors and LEDs are interfaced by mapping software logic directly to physical pin manipulation. Each IR sensor provides real-time inputs via analog pins (A0 to A7), which are read in the functions to assess traffic density . Based on these sensor readings, logical conditions activate or deactivate LED pins set as outputs (R1 to G4) to control traffic lights . The digitalWrite function implements these logic decisions into physical light changes, depicting the software's decision-making process through real-world visual feedback, ensuring effective traffic management . This integration exemplifies embedded system control where software logic governs hardware operations accurately and responsively.

The `ambulance` function is designed to respond to emergency situations. When invoked, it prioritizes traffic management to clear a path for an ambulance. Depending on which road the ambulance is detected (specified by analogy variable equality checks: a==b, a==c, or a==d), the function initializes a countdown from 20 seconds on the respective 7-segment display, during which the red lights on corresponding roads are deactivated . This function temporarily overrides normal traffic operations to ensure a rapid passage, affecting the road indicated by the variables a, b, c, and d .

You might also like