//Traffic light pertigaan
//Membuat Array lampu
int merah[] = {1, 4, 7, 10};
int kuning[] = {2, 5, 8, 11};
int hijau[] = {3, 6, 9, 12};
//Array fase
int fase[] = {1, 2, 3, 4};
//Menentukan delay
int d3s = 1000;
int d1s = 500;
int dms = 100;
void setup() {
// put your setup code here, to run once:
//Konfigurasi pinMode
for (int pin = 0; pin <= 3; pin++) {
pinMode(merah[pin], OUTPUT);
pinMode(kuning[pin], OUTPUT);
pinMode(hijau[pin], OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly;
for (int fase = 0; fase <= 3; fase++) {
if (fase == 0) {
faseL1();
delay(d3s);
transisiStop(fase);
delay(100);
transisiGo(fase);
}
else if (fase == 1) {
faseL2();
delay(d3s);
transisiStop(fase);
delay(dms);
transisiGo(fase);
}
else if (fase == 2) {
faseL3();
delay(d3s);
transisiStop(fase);
delay(dms);
transisiGo(fase);
}
else {
faseL4();
delay(d3s);
transisiStop(fase);
delay(dms);
transisiGo(fase);
}
}
}
//Function yang dipakai
//Fase 1 = Kanan hijau, Kiri, Atas & Bawah merah
int faseL1() {
//kondisi lampu merah
digitalWrite(merah[0], LOW);
digitalWrite(merah[1], HIGH);
digitalWrite(merah[2], HIGH);
digitalWrite(merah[3], HIGH);
//kondisi lampu kuning
digitalWrite(kuning[0], LOW);
digitalWrite(kuning[1], LOW);
digitalWrite(kuning[2], LOW);
digitalWrite(kuning[3], LOW);
//kondisi lampuu hijau
digitalWrite(hijau[0], HIGH);
digitalWrite(hijau[1], LOW);
digitalWrite(hijau[2], LOW);
digitalWrite(hijau[3], LOW);
}
//Fase 2 = Bawah hijau, Kiri, Atas & Kanan merah
int faseL2() {
//kondisi lampu merah
digitalWrite(merah[0], HIGH);
digitalWrite(merah[1], LOW);
digitalWrite(merah[2], HIGH);
digitalWrite(merah[3], HIGH);
//kondisi lampu kuning
digitalWrite(kuning[0], LOW);
digitalWrite(kuning[1], LOW);
digitalWrite(kuning[2], LOW);
digitalWrite(kuning[3], LOW);
//kondisi lampuu hijau
digitalWrite(hijau[0], LOW);
digitalWrite(hijau[1], HIGH);
digitalWrite(hijau[2], LOW);
digitalWrite(hijau[3], LOW);
}
//Fase 3 = Kiri hijau, Kanan, Atas & Bawah merah
int faseL3() {
//kondisi lampu merah
digitalWrite(merah[0], HIGH);
digitalWrite(merah[1], HIGH);
digitalWrite(merah[2], LOW);
digitalWrite(merah[3], HIGH);
//kondisi lampu kuning
digitalWrite(kuning[0], LOW);
digitalWrite(kuning[1], LOW);
digitalWrite(kuning[2], LOW);
digitalWrite(kuning[3], LOW);
//kondisi lampuu hijau
digitalWrite(hijau[0], LOW);
digitalWrite(hijau[1], LOW);
digitalWrite(hijau[2], HIGH);
digitalWrite(hijau[3], LOW);
}
//Fase 4 = Atas hijau, Kanan, Kiri & Bawah merah
int faseL4() {
//kondisi lampu merah
digitalWrite(merah[0], HIGH);
digitalWrite(merah[1], HIGH);
digitalWrite(merah[2], HIGH);
digitalWrite(merah[3], LOW);
//kondisi lampu kuning
digitalWrite(kuning[0], LOW);
digitalWrite(kuning[1], LOW);
digitalWrite(kuning[2], LOW);
digitalWrite(kuning[3], LOW);
//kondisi lampuu hijau
digitalWrite(hijau[0], LOW);
digitalWrite(hijau[1], LOW);
digitalWrite(hijau[2], LOW);
digitalWrite(hijau[3], HIGH);
}
//Transisi dari hijau ke merah universal
int transisiStop(int fase) {
//Untuk mematikan/STOP fase X-1
digitalWrite(hijau[fase], LOW);
digitalWrite(kuning[fase], HIGH);
delay(d1s);
digitalWrite(kuning[fase], LOW);
digitalWrite(merah[fase], HIGH);
}
//Transisi dari merah ke hijau universal
int transisiGo(int fase) {
//Untuk fase 4
if(fase == 3){
digitalWrite(merah[fase], LOW);
digitalWrite(kuning[fase], HIGH);
delay(d1s);
digitalWrite(kuning[fase], LOW);
digitalWrite(hijau[fase], HIGH);
}
//Untuk fase 1, 2, 3
else {
digitalWrite(merah[fase + 1], LOW);
digitalWrite(kuning[fase + 1], HIGH);
delay(d1s);
digitalWrite(kuning[fase + 1], LOW);
digitalWrite(hijau[fase + 1], HIGH);
}
}