#define LED_MERAH_1 2
#define LED_KUNING_1 4
#define LED_HIJAU_1 15
#define LED_MERAH_2 5
#define LED_KUNING_2 32
#define LED_HIJAU_2 33
// Waktu delay (dalam milidetik)
#define WAKTU_MERAH 5000
#define WAKTU_KUNING 2000
#define WAKTU_HIJAU 3000
void setup() {
Serial.begin(115200);
pinMode(LED_MERAH_1, OUTPUT);
pinMode(LED_KUNING_1, OUTPUT);
pinMode(LED_HIJAU_1, OUTPUT);
pinMode(LED_MERAH_2, OUTPUT);
pinMode(LED_KUNING_2, OUTPUT);
pinMode(LED_HIJAU_2, OUTPUT);
}
void loop() {
trafficLight(LED_MERAH_1, LED_KUNING_1, LED_HIJAU_1, LED_MERAH_2, WAKTU_MERAH, WAKTU_KUNING, WAKTU_HIJAU);
trafficLight(LED_MERAH_2, LED_KUNING_2, LED_HIJAU_2, LED_HIJAU_1, WAKTU_KUNING, WAKTU_MERAH - WAKTU_KUNING - WAKTU_HIJAU, WAKTU_HIJAU);
}
void trafficLight(int merah, int kuning, int hijau, int hijau_lain, int waktu_merah, int waktu_kuning, int waktu_hijau) {
digitalWrite(merah, HIGH);
Serial.println("Lampu merah nyala");
delay(waktu_merah);
digitalWrite(merah, LOW);
digitalWrite(kuning, HIGH);
Serial.println("Lampu kuning nyala");
delay(waktu_kuning);
digitalWrite(kuning, LOW);
digitalWrite(hijau, HIGH);
Serial.println("Lampu hijau nyala");
delay(waktu_hijau);
digitalWrite(hijau, LOW);
digitalWrite(kuning, HIGH);
Serial.println("Lampu kuning nyala");
delay(waktu_kuning);
digitalWrite(kuning, LOW);
if (digitalRead(hijau_lain) == LOW) {
digitalWrite(hijau_lain, HIGH);
Serial.println("Lampu hijau lain nyala");
}
}