//Traffic light pertigaan
//Setup pin dan Array
//Membuat Array lampu
int merah[] = {1, 4, 7}; //Array lampu merah
int kuning[] = {2, 5, 8}; //Array lampu kuning
int hijau[] = {3, 6, 9}; //Array lampu hijau
//Array fase
int fase[] = {1, 2, 3};
//Menentukan delay
int djeda = 1000; //delay jeda || lama lampu hijau & merah menyala
int dtransisi = 500; //delay transisi || lama lampu kuning menyala
int dsafe = 100; //delay antar jalur || lama jeda antar jalur
int On = 2500;
void setup() {
// put your setup code here, to run once:
//Konfigurasi pinMode
for (int i = 0; i <= 2; i++) {
pinMode(merah[i], OUTPUT);
pinMode(kuning[i], OUTPUT);
pinMode(hijau[i], OUTPUT);
digitalWrite(merah[i], HIGH);
}
delay(On);
transisiGo(2);
}
//Loop
void loop() {
// put your main code here, to run repeatedly;
for (int fase = 0; fase <= 2; fase++) {
if (fase == 0) { //Jika fase = 0, jalankan ini
faseL1(); //nyalakan lampu sesuai dengan fase 1
delay(djeda); //delay lampu
transisiStop(fase); //sequence transisi stop (hijau ke merah)
delay(100); //delay antar jalur
transisiGo(fase); //sequence transisi go (merah ke hijau) untuk
}
else if (fase == 1) { //Jika fase = 1, jalankan ini
faseL2();
delay(djeda);
transisiStop(fase);
delay(dsafe);
transisiGo(fase);
}
else { //Jika bukan kedua diatas || fase = 3, jalankan ini
faseL3();
delay(djeda);
transisiStop(fase);
delay(dsafe);
transisiGo(fase);
}
}
}
//Function yang dipakai
//Fase 1 = Kanan hijau, Kiri & Bawah merah
int faseL1() {
//kondisi lampu merah
digitalWrite(merah[0], LOW);
digitalWrite(merah[1], HIGH);
digitalWrite(merah[2], HIGH);
//kondisi lampu kuning
digitalWrite(kuning[0], LOW);
digitalWrite(kuning[1], LOW);
digitalWrite(kuning[2], LOW);
//kondisi lampuu hijau
digitalWrite(hijau[0], HIGH);
digitalWrite(hijau[1], LOW);
digitalWrite(hijau[2], LOW);
}
//Fase 2 = Bawah hijau, Kiri & Kanan merah
int faseL2() {
//kondisi lampu merah
digitalWrite(merah[0], HIGH);
digitalWrite(merah[1], LOW);
digitalWrite(merah[2], HIGH);
//kondisi lampu kuning
digitalWrite(kuning[0], LOW);
digitalWrite(kuning[1], LOW);
digitalWrite(kuning[2], LOW);
//kondisi lampuu hijau
digitalWrite(hijau[0], LOW);
digitalWrite(hijau[1], HIGH);
digitalWrite(hijau[2], LOW);
}
//Fase 3 = Kiri hijau, Kanan & Bawah merah
int faseL3() {
//kondisi lampu merah
digitalWrite(merah[0], HIGH);
digitalWrite(merah[1], HIGH);
digitalWrite(merah[2], LOW);
//kondisi lampu kuning
digitalWrite(kuning[0], LOW);
digitalWrite(kuning[1], LOW);
digitalWrite(kuning[2], LOW);
//kondisi lampuu hijau
digitalWrite(hijau[0], LOW);
digitalWrite(hijau[1], LOW);
digitalWrite(hijau[2], HIGH);
}
int transisiStop(int fase) { //Transisi dari hijau ke merah
digitalWrite(hijau[fase], LOW);
digitalWrite(kuning[fase], HIGH);
delay(dtransisi);
digitalWrite(kuning[fase], LOW);
digitalWrite(merah[fase], HIGH);
}
int transisiGo(int fase) { //Transisi dari merah ke hijau
if(fase == 2){ //Untuk fase 3
digitalWrite(kuning[fase - 2], HIGH);
delay(dtransisi);
digitalWrite(merah[fase - 2], LOW);
digitalWrite(kuning[fase - 2], LOW);
digitalWrite(hijau[fase - 2], HIGH);
}
else { //Untuk fase <3
digitalWrite(kuning[fase + 1], HIGH);
delay(dtransisi);
digitalWrite(merah[fase + 1], LOW);
digitalWrite(kuning[fase + 1], LOW);
digitalWrite(hijau[fase + 1], HIGH);
}
}