int cycletime = 15;
int yellowtime = 1;
int vehicleratio [4] = {222, 156, 245, 189};
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() {
for (int x = 2; x < 14; x ++) pinMode(x, OUTPUT);
cycletime *= 1000;
yellowtime *= 1000;
int tot = vehicleratio[0] + vehicleratio[1] + vehicleratio[2] + vehicleratio[3];
effectivegreen = cycletime - (yellowtime * 4);
greenphase1 = (float)vehicleratio[0]/tot * effectivegreen;
greenphase2 = (float)vehicleratio[1]/tot * effectivegreen;
greenphase3 = (float)vehicleratio[2]/tot * effectivegreen;
greenphase4 = (float)vehicleratio[3]/tot * effectivegreen;
//all red
digitalWrite(phase_1_red, HIGH);
digitalWrite(phase_2_red, HIGH);
digitalWrite(phase_3_red, HIGH);
digitalWrite(phase_4_red, HIGH);
delay(1000);
}
void loop() {
// 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);
}