int cycletime= 15;
int yellowtime = 1;
int vehiclesratio[4] = {200,150, 700,180};
int effectivegreen, greenphase1, greenphase2, greenphase3, greenphase4;
//pin phase
#define phase_1_green 2
#define phase_1_yellow 3
#define phase_1_red 4
#define phase_2_green 5
#define phase_2_yellow 6
#define phase_2_red 7
#define phase_3_green 8
#define phase_3_yellow 9
#define phase_3_red 10
#define phase_4_green 11
#define phase_4_yellow 12
#define phase_4_red 13
void setup() {
// put your setup code here, to run once:
for(int x=2; x<14; x++) pinMode(x, OUTPUT);
cycletime *= 1000;
yellowtime *=1000;
int tot = vehiclesratio[0] + vehiclesratio[1] + vehiclesratio[2] + vehiclesratio[3];
effectivegreen = cycletime - (yellowtime * 4);
greenphase1 = (float)vehiclesratio[0]/tot*effectivegreen;
greenphase2 = (float)vehiclesratio[1]/tot*effectivegreen;
greenphase3 = (float)vehiclesratio[2]/tot*effectivegreen;
greenphase4 = (float)vehiclesratio[3]/tot*effectivegreen;
digitalWrite(phase_1_red, HIGH);
digitalWrite(phase_2_red, HIGH);
digitalWrite(phase_3_red, HIGH);
digitalWrite(phase_4_red, HIGH);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
//phase 1
digitalWrite(phase_1_red, LOW);
digitalWrite(phase_1_green, HIGH);
delay(greenphase1);
digitalWrite(phase_1_green, LOW);
digitalWrite(phase_1_yellow, HIGH);
delay(yellowtime);
digitalWrite(phase_1_yellow, LOW);
digitalWrite(phase_1_red, HIGH);
//phase 2
digitalWrite(phase_2_red, LOW);
digitalWrite(phase_2_green, HIGH);
delay(greenphase2);
digitalWrite(phase_2_green, LOW);
digitalWrite(phase_2_yellow, HIGH);
delay(yellowtime);
digitalWrite(phase_2_yellow, LOW);
digitalWrite(phase_2_red, HIGH);
//phase 3
digitalWrite(phase_3_red, LOW);
digitalWrite(phase_3_green, HIGH);
delay(greenphase3);
digitalWrite(phase_3_green, LOW);
digitalWrite(phase_3_yellow, HIGH);
delay(yellowtime);
digitalWrite(phase_3_yellow, LOW);
digitalWrite(phase_3_red, HIGH);
//phase 4
digitalWrite(phase_4_red, LOW);
digitalWrite(phase_4_green, HIGH);
delay(greenphase4);
digitalWrite(phase_4_green, LOW);
digitalWrite(phase_4_yellow, HIGH);
delay(yellowtime);
digitalWrite(phase_4_yellow, LOW);
digitalWrite(phase_4_red, HIGH);
}