//lane 1
const int LED2_red= 13;
const int LED2_yellow= 12;
const int LED2_green= 11;
//lane 2
const int LED_red =4;
const int LED_yellow =9;
const int LED_green =8;
// walking signal
const int signalred =5;
const int signalblue =7;
const int button= 2;
// walking signal 2
const int button2 =3;
const int walkred =6;
const int walkblue =10;
//sensor 1&2
const int sensor=1;
const int sensor2=0;
// set variable to count and store button value
int buttonstate =0,walkrequest =0;
void setup() {
// put your setup code here, to run once:
// All LED output
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(4, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(10, OUTPUT);
//input
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(1, INPUT);
pinMode(0, INPUT);
attachInterrupt(0,request,CHANGE);// interrupt current traffic and change to walking requst
//initial all LED red is high.
digitalWrite(13, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}
void loop() {
if(walkrequest==1){
Walksignal();
}
if(digitalRead(sensor)&&!digitalRead(sensor2)){// When sensor detected IR
delay(2000);//red 2sec
digitalWrite(4, LOW);// green on,red off 10sec
digitalWrite(8, HIGH);
delay(10000);
digitalWrite(8, LOW);
for(int i=0;i<8;i++){
//green off and yellow blink
digitalWrite(9, HIGH);
delay(250);
digitalWrite(9, LOW);
delay(250);
}
while(digitalRead(sensor)){
digitalWrite(4, HIGH);//red on and yellow off
digitalWrite(9, LOW);
if(walkrequest == 1){
Walksignal(); //When button is pressed then call the Walksignal() function.
}
}
}
if(!digitalRead(sensor) && digitalRead(sensor2)){
delay(2000);//red 2sec
digitalWrite(13, LOW);
digitalWrite(11, HIGH);//red2 off & green 2 on 10sec
delay(10000);
digitalWrite(11, LOW);
for(int i=0;i<8;i++){ // blink yellow
digitalWrite(12, HIGH);
delay(250);
digitalWrite(12, LOW);
delay(250);
}
while(digitalRead(sensor2)){
digitalWrite(13, HIGH); // yellow2 off & red2 on
digitalWrite(12, LOW);
if (walkrequest ==1){
Walksignal();
}
}
}
}
void Walksignal(){ //function when cycle walksignal
delay(3000);//waiting 3 sec to run walksignal
digitalWrite(7, HIGH);
digitalWrite(10, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
delay(5000); //walksignal 5sec
digitalWrite(7, LOW);
for(int i=0;i<5;i++){ //blink walksignal
digitalWrite(7, HIGH);
digitalWrite(10, HIGH);
delay(250);
digitalWrite(7, LOW);
digitalWrite(10, LOW);
delay(250);
}
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
walkrequest=0;//reset walkrequest to 0
}
void request(){ // function button
buttonstate = digitalRead(button);
buttonstate = digitalRead(button2);
walkrequest =1; //When walking button pressed
}