// C++ code
//
#define RedLed1 3
#define YellowLed1 4
#define GreenLed1 5
#define button 18
#define RedLed2 12
#define YellowLed2 13
#define GreenLed2 14
#define RedLed3 15
#define YellowLed3 16
#define GreenLed3 17
#define pedestrianStopRedLed 1
#define pedestrianGoGreenLed 2
#define r1In 19
#define r1Out 21
#define r2In 22
#define r2Out 23
#define r3In 25
#define r3Out 26
bool flag=false;
int r1count=0;
int r2count=0;
int r3count=0;
int r1extra=0;
int r2extra=0;
int r3extra=0;
void setup()
{ //check if the buttotn is pressed and update the flag if
//its pressed
pinMode(RedLed1,OUTPUT);
pinMode(YellowLed1,OUTPUT);
pinMode(GreenLed1,OUTPUT);
pinMode(button,INPUT);
pinMode( r1In,INPUT);
pinMode(r1Out,INPUT);
pinMode( r2In,INPUT);
pinMode(r2Out,INPUT);
pinMode( r3In,INPUT);
pinMode(r3Out,INPUT);
pinMode(RedLed2,OUTPUT);
pinMode(YellowLed2,OUTPUT);
pinMode(GreenLed2,OUTPUT);
pinMode(pedestrianStopRedLed,OUTPUT);
pinMode(pedestrianGoGreenLed,OUTPUT);
pinMode(RedLed3,OUTPUT);
pinMode(YellowLed3,OUTPUT);
pinMode(GreenLed3,OUTPUT);
digitalWrite(RedLed1,HIGH);
digitalWrite(RedLed2,HIGH);
digitalWrite(RedLed3,1);
digitalWrite(pedestrianStopRedLed,1);
//attach interrupt pin to button so it updates the flag every
//time its pressed
attachInterrupt(button, pedestrian, RISING);
attachInterrupt(r1In,r1increase, RISING);
attachInterrupt(r1Out,r1decrease, RISING);
attachInterrupt(r2In,r2increase, RISING);
attachInterrupt(r2Out,r2decrease, RISING);
attachInterrupt(r3In,r3increase, RISING);
attachInterrupt(r3Out,r3decrease, RISING);
Serial.begin(115200);
}
void loop()
{
Serial.println(r1extra);
if(r1count>10)
{
r1extra=r1count-10 ;
Serial.println(r1extra);
r1extra=(500*r1extra)+3000;
}
else if (r1count<10)
{
r1extra=3000;
}
if(r2count>10)
{
r2extra=r2count-10 ;
r2extra=3000 +500*r2extra;
}
else if(r2count<10)
{
r2extra=3000;
}
if(r3count>10)
{
r3extra=r3count-10 ;
r3extra=3000 +500*r3extra;
}
else if(r3count<10)
{
r3extra=3000;
}
Serial.println(r1extra);
open(1,1000);
if (flag==true){
open(4,5000);
flag=false;
}
open(2,r2extra);
if (flag==true){
open(4,5000);
flag=false;
}
open(3,r3extra);
if (flag==true){
open(4,5000);
flag=false;
}
}
void open(int robot ,int GreenDelay)
{
switch(robot)
{
case 1:
digitalWrite(RedLed1,LOW);
digitalWrite(YellowLed1,LOW);
digitalWrite(GreenLed1,HIGH);
delay(GreenDelay);
digitalWrite(RedLed1,LOW);
digitalWrite(GreenLed1,LOW);
digitalWrite(YellowLed1,HIGH);
delay(5000);
digitalWrite(YellowLed1,LOW);
digitalWrite(GreenLed1,LOW);
digitalWrite(RedLed1,HIGH);
break;
case 2:
digitalWrite(RedLed2,LOW);
digitalWrite(YellowLed2,LOW);
digitalWrite(GreenLed2,HIGH);
delay(GreenDelay);
digitalWrite(RedLed2,LOW);
digitalWrite(GreenLed2,LOW);
digitalWrite(YellowLed2,HIGH);
delay(5000);
digitalWrite(YellowLed2,LOW);
digitalWrite(GreenLed2,LOW);
digitalWrite(RedLed2,HIGH);
break;
case 3:
digitalWrite(RedLed3,LOW);
digitalWrite(YellowLed3,LOW);
digitalWrite(GreenLed3,HIGH);
delay(GreenDelay);
digitalWrite(RedLed3,LOW);
digitalWrite(GreenLed3,LOW);
digitalWrite(YellowLed3,HIGH);
delay(5000);
digitalWrite(YellowLed3,LOW);
digitalWrite(GreenLed3,LOW);
digitalWrite(RedLed3,HIGH);
break;
case 4:
digitalWrite(pedestrianStopRedLed,0);
digitalWrite(RedLed1,LOW);
digitalWrite(RedLed2,LOW);
digitalWrite(YellowLed1,LOW);
digitalWrite(YellowLed2,LOW);
digitalWrite(pedestrianGoGreenLed,1);
digitalWrite(GreenLed1,HIGH);
digitalWrite(GreenLed2,HIGH);
delay(GreenDelay);
digitalWrite(pedestrianGoGreenLed,0);
digitalWrite(GreenLed1,LOW);
digitalWrite(GreenLed2,LOW);
digitalWrite(RedLed1,LOW);
digitalWrite(RedLed2,LOW);
digitalWrite(pedestrianStopRedLed,1);
digitalWrite(YellowLed1,HIGH);
digitalWrite(YellowLed2,HIGH);
delay(1000);
digitalWrite(pedestrianGoGreenLed,0);
digitalWrite(GreenLed1,LOW);
digitalWrite(GreenLed2,LOW);
digitalWrite(YellowLed1,LOW);
digitalWrite(YellowLed2,LOW);
digitalWrite(pedestrianStopRedLed,1);
digitalWrite(RedLed1,HIGH);
digitalWrite(RedLed2,HIGH);
break;
default:
digitalWrite(RedLed1,HIGH);
digitalWrite(RedLed2,HIGH);
digitalWrite(RedLed3,HIGH);
delay(1000);
digitalWrite(RedLed1,LOW);
digitalWrite(RedLed2,LOW);
digitalWrite(RedLed3,LOW);
delay(1000);
digitalWrite(RedLed1,HIGH);
digitalWrite(RedLed2,HIGH);
digitalWrite(RedLed3,HIGH);
delay(1000);
break;
}
}
void pedestrian()
{
flag=true;
Serial.println(flag);
}
void r1increase()
{
r1count++;
Serial.println(r1count);
}
void r1decrease()
{
r1count--;
Serial.println(r1count);
}
void r2increase()
{
r2count++;
}
void r2decrease()
{
r2count--;
}
void r3increase()
{
r3count++;
}
void r3decrease()
{
}