// Lampu Lalu Lintas 4 Jalur_Ver1 by Ridho Alfarizi 2107431054
int cycletime = 18;
int yellowtime = 2;
int vehiclesratio[4] = {222, 255, 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() {
// put your setup code here, to run once:
for (int x = 2; x < 14; x ++) pinMode(x, OUTPUT);
cycletime *= 1000; // convert to milliseconds
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;
// 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() {
// 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);
}
// Referensi : https://www.youtube.com/watch?v=PMYOYdhWDn8&ab_channel=GantengPermanen