GAMING FUN
Published © GPL3+

Traffic Light

Simulation of a real traffic light system (road one way + U-turn )

IntermediateShowcase (no instructions)1,257
Traffic Light

Things used in this project

Hardware components

Arduino Mega 2560
Arduino Mega 2560
×1
Male/Female Jumper Wires
Male/Female Jumper Wires
×1
5 mm LED: Red
5 mm LED: Red
×2
5 mm LED: Green
5 mm LED: Green
×2
High Brightness LED, White
High Brightness LED, White
×6
5 mm LED: Yellow
5 mm LED: Yellow
×2
3 mm LED: Red
3 mm LED: Red
×2
3 mm LED: Green
3 mm LED: Green
×2
LDR, 5 Mohm
LDR, 5 Mohm
×1
Pushbutton Switch, Pushbutton
Pushbutton Switch, Pushbutton
×3
7 Segment LED Display, InfoVue
7 Segment LED Display, InfoVue
×1

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Hot glue gun (generic)
Hot glue gun (generic)
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires

Story

Read more

Code

c code for traffic light system

C#
testing each component alone , then trying to add them together step by step and observe the result
//#include <VarSpeedServo.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define F_CPU 16000000

int pinA = 8;
int pinB = 9;
int pinC = 4;
int pinD = 3;
int pinE = 2;
int pinF = 7;
int pinG = 6;
int pinP = 5;
#define buzz PB6                   // BUZZER 
#define ledR1 PB0                  // RED LIGHT AT THE MAIN ROAD   //TRAFFIC
#define ledY1 PB1                  // YELLOW LIGHT AT THE MAIN ROAD //TRAFFIC
#define ledG1 PB2                  // GREEN LIGHT AT THE MAIN ROAD //TRAFFIC
#define ledR2 PB3                   // RED LIGHT AT U-TURN //TRAFFIC
#define ledY2 PB4                 // YELLOW LIGHT AT U-TURN //TRAFFIC
#define ledG2 PB5                 // GREEN LIGHT AT U-TURN //TRAFFIC
#define ledtr PF0                 // PEDESTRIAN CROSS RED LED
#define ledtg PF1                  // PEDESTRIAN CROSS GREEN LED
#define IR1 PD3                     //IR SENSOR
#define IR2 PJ1                      //IR SENSOR
#define IR3 PA0                        //IR SENSOR
#define IR4 PA1                         //IR SENSOR
#define ledoff PA4                      //MAIN SWITCH LED RED 
#define ledon PA5                       //MAIN SWITCH LED GREEN 
#define ledflash PA6                    // WHITE LED FLASH (RADAR)

#define button1 PC3                        //BUTTON 1 FOR THE PEDESTRIAN 
#define button2 PK0                        //BUTTON 2 (THE MAIN TRAFFIC SWITCH)

volatile unsigned char elec=0;           //SOME of these volatile variables are no longer used  
volatile unsigned int e=0;
    
volatile unsigned int ldrStatus=0;

 volatile unsigned int pinchange = 0;
 volatile unsigned int x = 0;
 volatile unsigned int S = 0;
 int o=0;
 int sens1 =22;
 int sens2 =23;
      
 




ISR(TIMER3_OVF_vect){        // TIMER 3 INTURREPTS ,AFTER SOME TIME , IT CHECKS IF THE LIGHT BECOME UNDER CERTAIN VALUE OR NOT TO OPEN THE LIGHT OR NOT (LDR SENSOR )

int ldrStatus = analogRead(A11);  /* ASLO THAT BLOCK HAS BEEN ADDED IN ANOTHER PARTS OF THE CODE TO MAKE SURE THE STREET LIGHTS ARE ON AT NIGHT EVEN THE CODE IS IN ANOTHER INTURREPT*/

if (ldrStatus <= 200) {

digitalWrite(41, HIGH);


Serial.println(ldrStatus);

} else {

digitalWrite(41, LOW);




}



}
volatile unsigned int count=0;
volatile unsigned long start =0;
volatile unsigned long t1 =0;
volatile unsigned long t2 =0;
volatile  float t3=0;




ISR(TIMER2_OVF_vect){         // if the uturn traffic is green and pedestrians are allowed to cross the street , and a car from the main road did not stop before the white
                            // line or just broke the traffic , for safety , the buzzer will alert the pedestrians and the 7-segment display will plink, also the servo(gate)
S++;                         // will close at the u-turn slowly(MODIFIED AFTER THE PRESENTATION) to avoid any accident ( timer check if pinchange (ir sensor at the white line (main road ))
if(S>=100){                   //that come from the pinchange inturrept below
if(pinchange==1){
pinchange=0;
S=0;


int ldrStatus = analogRead(A11);   //CHECK FOR THE LDR AGAIN

if (ldrStatus <= 200) {

digitalWrite(41, HIGH);


Serial.println(ldrStatus);

} else {

digitalWrite(41, LOW);




}





  PORTF &= ~(1<<ledtg);
 TCNT2=99;
 OCR5A=350;                              // CONTROLLING THE SERVO 
    _delay_ms(100);
 OCR5A=340;  
    _delay_ms(100);
 OCR5A=320;  
    _delay_ms(100);
OCR5A=300;  
    _delay_ms(100);
    OCR5A=280;    
    _delay_ms(100);
    OCR5A=260;  
    _delay_ms(100);
    OCR5A=220;  
    _delay_ms(100);
    OCR5A=190;  
    _delay_ms(500);
       OCR5A=150;  
    _delay_ms(500);


 ldrStatus = analogRead(A11);  //CHECK FOR THE LDR AGAIN 

if (ldrStatus <= 200) {

digitalWrite(41, HIGH);


Serial.println(ldrStatus);

} else {

digitalWrite(41, LOW);




}

    

PORTB |=  (1<<ledG2);           // LEDS AND THE 7-SEGMENT DISPLAY 
PORTB |= (1<<buzz);
PORTF |= (1<<ledtr);
digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, LOW);
_delay_ms(800);
PORTB &=  ~(1<<ledG2);
PORTB &= ~(1<<buzz);
PORTF &= ~(1<<ledtr);
digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);
_delay_ms(200);
OCR5A=140;              // SERVO
    _delay_ms(500);
  OCR5A=130;  
    _delay_ms(500);
PORTB |=  (1<<ledG2);
PORTB |= (1<<buzz);
PORTF |= (1<<ledtr);
digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, LOW);
_delay_ms(800);
PORTB &=  ~(1<<ledG2);

PORTB &= ~(1<<buzz);
PORTF &= ~(1<<ledtr);
digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);
_delay_ms(200);
PORTB |=  (1<<ledG2);
PORTB |= (1<<buzz);
PORTF |= (1<<ledtr);


 ldrStatus = analogRead(A11);   //CHECK THE LDR AGAIN

if (ldrStatus <= 200) {

digitalWrite(41, HIGH);


Serial.println(ldrStatus);

} else {

digitalWrite(41, LOW);




}



digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, LOW);
_delay_ms(800);
PORTB &=  ~(1<<ledG2);

PORTB &= ~(1<<buzz);
PORTF &= ~(1<<ledtr);
digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);
_delay_ms(200);
OCR5A=120;                   // CONTOLLING THE SERVO(GATE)
    _delay_ms(500);
  OCR5A=75;  
    _delay_ms(500);
PORTB |=  (1<<ledG2);
PORTB |= (1<<buzz);
PORTF |= (1<<ledtr);
digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, LOW);
_delay_ms(800);
PORTB &=  ~(1<<ledG2);

PORTB &= ~(1<<buzz);               //BUZZER
PORTF &= ~(1<<ledtr);
digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);
_delay_ms(200);

 ldrStatus = analogRead(A11);      //CHECK THE LDR 

if (ldrStatus <= 200) {

digitalWrite(41, HIGH);


Serial.println(ldrStatus);

} else {

digitalWrite(41, LOW);




}

OCR5A=100;  
    _delay_ms(500);
  OCR5A=75;  
    _delay_ms(500);
digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);
 PORTB &= ~(1<<ledG2);
PORTB |=  (1<<ledY2);
_delay_ms(1000);
PORTB &=  ~(1<<ledY2);
PORTB |=  (1<<ledR2);
_delay_ms(3500);

PORTB &=  ~(1<<ledR2);

PORTB |= (1<<ledG2);
PORTF |= (1<<ledtg);
OCR5A=360;                       //AFTER SOME TIME THE TRAFFIC RETURNS TO ITS ORGINAL SITUATION THE GATE OPENS AGAIN 
    _delay_ms(1500);


}
  
}

TCNT2=99;
pinchange=0;



  
}
  






ISR(PCINT1_vect )     // pinchange inturrept ( for the IR SENSOR AT THE MAIN ROAD WHITE LINE to detect any car passing the white line when the main road(2 lanes) is RED
{
   
pinchange=1; 
  x=0;


}


  


void(* resetFunc) (void) = 0;       //the reset function 



ISR(PCINT2_vect ){   //THIS PINCHANGE INTURREPT IS FOR THE MAIN SWITCH TO RESET THE CODE AGAIN and evey thing shutdown until the main switched has been turned on  


    resetFunc();        //calling the reset function

  


}








 
int main() { 
 
     
pinMode(sens1 , INPUT);             // configuring all outputs ,inputs ,timers and inturrepts
pinMode(sens2 , INPUT);

DDRK &= ~(1<<PK3);
DDRK &= ~(1<<PK0);                                   
PORTK |= (1<<button2);
DDRG |= (1<<PG0);
DDRA &= ~((1<<IR3)|(1<<IR4));
    DDRB=0xff;
    DDRA |= (1<<ledoff) | (1<<ledon) | (1<<ledflash);
  DDRC &= ~(1<<button1);
    DDRD &= ~(1<<IR1);
  PORTC |= (1<<button1);
    DDRC |= (1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC4)|(1<<PC5);
    DDRF |=  (1<<ledtr)|(1<<ledtg); 
    PORTB &=  ~(1<<ledY1);
 PORTA |= (1<<ledoff);
   PORTA &= ~(1<<ledon);

pinMode(pinA, OUTPUT);     
  pinMode(pinB, OUTPUT);     
  pinMode(pinC, OUTPUT);     
  pinMode(pinD, OUTPUT);     
  pinMode(pinE, OUTPUT);     
  pinMode(pinF, OUTPUT);     
  pinMode(pinG, OUTPUT);   
  pinMode(pinP, OUTPUT); 
  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);
    DDRJ &= ~(1<<IR2);
  DDRD &= ~(1<<IR1);
    DDRD |= (1<<PD2)|(1<<PD1);
    PORTF &= ~(1<<ledtg);
PORTF &= ~(1<<ledtr);
PORTB &= ~(1<<ledG1);
PORTB &= ~(1<<ledR2);
PORTB &= ~(1<<ledR1);
PORTB &= ~(1<<ledY1);
PORTB &= ~(1<<ledG2);
PORTB &= ~(1<<ledY2);
PORTA &= ~(1<<ledflash);

int w=0;
int k=0;
int h=0;
int y=0;
int b=0;

cli();
PCICR|= ( 1<< PCIE1) ; 
PCMSK1 |= ( 1<< PCINT10);




TCCR5A|=(1<<COM5A1)|(1<<COM5B1)|(1<<WGM51);        
   TCCR5B|=(1<<WGM53)|(1<<WGM52)|(1<<CS51)|(1<<CS50); 
   ICR5=4999;  //fPWM=50Hz 
   DDRL|=(1<<PL3);


TCCR3A = 0 ;
TCCR3B = 0 ; 
TCNT3 = 600 ; 
TIMSK3 |= ( 1<< TOIE3) ;
 TCCR3B |=   ( 1<< CS31 ) | ( 1<< CS30 ) ;


TCCR1A = 0 ;
TCCR1B = 0 ; 
TCNT1 = 0 ; 



TCCR4A = 0 ;
TCCR4B = 0 ; 
TCNT4 = 59285 ; 
TIMSK4 |= ( 1<< TOIE4) ;
 
 
Serial.begin(9600);

pinMode(41, OUTPUT);

pinMode(A11, INPUT);

PCICR&= ~(1 <<  PCIE2);
PCMSK2 &= ~( 1<< PCINT16);
TCCR2A = 0 ;
TCCR2B = 0 ; 
TCNT2 = 99 ; 
TIMSK2 |= ( 1<< TOIE2) ;
sei();
 OCR5A=100;  //90 degree
    _delay_ms(500);
    
while(1) {



if((PINK & (1<<button2))==0){
  PORTA &= ~(1<<ledoff);                                //wait for the main switch to be pressed ( turn on) 
  PORTA |=(1<<ledon);
PORTF |= (1<<ledtr);
PORTB |= (1<<ledG1);
PORTB |= (1<<ledR2);
PORTB &= ~(1<<ledR1);
OCR5A=360;  
    _delay_ms(500);

_delay_ms(3000);

PCICR|= (1 <<  PCIE2);                                      // set the pinchange inturrept which reset the whole code (to make sure it does not work when the button is pressed) 
PCMSK2 |= ( 1<< PCINT16);
  y=1;
  
   b =1;

}                                    // the radar is only working when the MAIN ROAD IS GREEN 
if(digitalRead(sens1)==0){        //the RADAR ,once the ir sensor sense a car .Timer 1 starts 

         
t1=TCNT1;                               //t1 is eqaul to tcnt1
 TCCR1B |=   ( 1<< CS12 ) | ( 1<< CS10 ) ;

while(digitalRead(sens2));                 //ir 2 sense the car again
t2=TCNT1;                                 // t2 equal to the next value of tcnt1 when it passes infront the next ir sensor 
t3 =t2-t1;                                   //t3 the difference between t2 and t1 

if(t3<30000){                                //if t3 < 30000 approx 2 seconds (flash that car)
  
  PORTA |= (1<<ledflash);
_delay_ms(200);
PORTA &= ~(1<<ledflash);
}
else{

TCNT1=0;

  
}


}



    if((PIND & (1<<IR1)) ==0 && w==0 && y==1){          //IR1 is the U-turn sensor the sense when a car at the u-turn is waiting 
    k=1; 
    w=1; 
    b=0;
    }
     if((PINC & (1<<button1)) ==0 && w==0 && y==1){      //button 1 is the pedestrian button at both sides of the main road 
    k=1; 
    w=1; 
    b=0;
    }
  if(k==1){                 //either IR1 or one of the push button is pressed , the main road turns red and at the same time the uturn turns green and pedestrians can cross
    
   _delay_ms(10000);
 
for(int i=0 ; i<=5;i++){
PORTB ^=  (1<<ledG1);
_delay_ms(500);
}
 PORTB &= ~(1<<ledG1);
PORTB |=  (1<<ledY1);
_delay_ms(3000);
PORTB &=  ~(1<<ledY1);
 TCCR2B |= ( 1<< CS22) | ( 1<< CS21 ) | ( 1<< CS20 ) ;
S=0;
PORTB |=  (1<<ledR1);
PORTB &= ~(1<<ledR2);

PORTB |=  (1<<ledG2);
PORTF &= ~(1<<ledtr);
PORTF |=  (1<<ledtg);


 digitalWrite(pinA, LOW);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, HIGH); 
  for(int i =0;i<=999;i++){
  PORTB |= (1<<buzz);  
  _delay_ms(1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(1); 
  }




  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);   
  for(int i =0;i<=999;i++){
  PORTB |= (1<<buzz);  
  _delay_ms(1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(1); 
  }

  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, HIGH);  
  for(int i =0;i<=999;i++){
  PORTB |= (1<<buzz);  
  _delay_ms(1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(1); 
  }
  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);  
for(int i =0;i<=999;i++){
  PORTB |= (1<<buzz);  
  _delay_ms(1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(1); 
  }
  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);  
  for(int i =0;i<=999;i++){
  PORTB |= (1<<buzz);  
  _delay_ms(1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(1); 
  } 


  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);  
  for(int i =0;i<=999;i++){
  PORTB |= (1<<buzz);  
  _delay_ms(1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(1); 
  }   

//3
  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, HIGH);  
 for(int i =0;i<=999;i++){
  PORTB |= (1<<buzz);  
  _delay_ms(1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(1); 
  } 
  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH); 
    PORTF |=  (1<<ledtg); 
 
  for(int i =0;i<=9999;i++){
        PORTB |= (1<<buzz); 

  _delay_ms(0.1);               
    PORTB &= ~(1<<buzz); 
    
    _delay_ms(0.1); 
  } 
digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);
    PORTF &=  ~(1<<ledtg); 

 for(int i =0;i<=9999;i++){
  PORTB |= (1<<buzz);
  
  _delay_ms(0.1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(0.1); 
  } 
  PORTF |=  (1<<ledtg); 

  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);
//4
  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, HIGH);  
 for(int i =0;i<=9999;i++){
  PORTB |= (1<<buzz);
  
  _delay_ms(0.1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(0.1); 
  }
    PORTF &=  ~(1<<ledtg); 
  
  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);   
 for(int i =0;i<=9999;i++){
  PORTB |= (1<<buzz); 
 
  _delay_ms(0.1);               
    PORTB &= ~(1<<buzz); 
    _delay_ms(0.1); 
  } 
    PORTF |=  (1<<ledtg); 

digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   
  digitalWrite(pinP, HIGH); 

  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, LOW);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH);  
  _delay_ms(1000);
digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
  digitalWrite(pinP, HIGH); 
    PORTF &=  ~(1<<ledtg); 
    PORTF |=  (1<<ledtr); 
    
TCCR2B=0;
TCNT2=99;
k=0;
h=1;
  }

if(k==0 && h==1){        //when the 10 seonds pass the normal situation returns back and the main road turns to be green becsuse it is the major road that 
b=1;                     // much cars use it 
for(int i=0 ; i<=5;i++){
PORTB ^=  (1<<ledG2);
_delay_ms(500);
}
 PORTB &= ~(1<<ledG2);
PORTB |=  (1<<ledY2);
_delay_ms(3000);
PORTB &=  ~(1<<ledY2);
PORTB |=  (1<<ledR2);
PORTB &= ~(1<<ledR1);

PORTB |=  (1<<ledG1);
PORTF |= (1<<ledtr);
  h=0;
  w=0;
}



}
  
}          

Credits

GAMING FUN
3 projects • 0 followers
Contact

Comments

Please log in or sign up to comment.