// Traffice light simpang 4
// Menggunakan ESP32 karena bosan arduino
#define NORTH 0
#define SOUTH 1
#define WEST 2
#define EAST 3
int signals[4][3] = {
{13, 12, 14}, // Utara: Merah, Kuning, Hijau
{27, 26, 25}, // Selatan: Merah, Kuning, Hijau
{33, 32, 15}, // Barat: Merah, Kuning, Hijau
{4, 2, 5} // Timur: Merah, Kuning, Hijau
};
// Waktu delay (dalam millidetik)
const int greenTime = 30000; // 30 detik
const int yellowTime = 3000; // 3 detik
const int allRedTime = 2000; // 2 detik all-red untuk keamanan
const char* directions[] = {"Utara", "Selatan", "Barat", "Timur"};
void setup() {
Serial.begin(115200);
// Setel semua LED jadi output
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
pinMode(signals[i][j], OUTPUT);
}
}
// Mulai dengan semua lampu merah
allRed();
Serial.println("Sistem Lampu Lalu Lintas Dr. Senku telah dimulai!");
}
void loop() {
for (int i = 0; i < 4; i++) {
cycleGreen(i);
cycleYellow(i);
allRed();
}
}
void cycleGreen(int direction) {
Serial.printf("Lampu Hijau untuk arah %s\n", directions[direction]);
digitalWrite(signals[direction][2], HIGH); // Hijau ON
digitalWrite(signals[direction][0], LOW); // Merah OFF
for (int i = greenTime / 1000; i > 0; i--) {
Serial.printf("%s: %d detik tersisa\n", directions[direction], i);
delay(1000);
}
digitalWrite(signals[direction][2], LOW); // Hijau OFF
}
void cycleYellow(int direction) {
Serial.printf("Lampu Kuning untuk arah %s\n", directions[direction]);
digitalWrite(signals[direction][1], HIGH); // Kuning ON
delay(yellowTime);
digitalWrite(signals[direction][1], LOW); // Kuning OFF
}
void allRed() {
Serial.println("Semua arah Merah - fase transisi aman");
for (int i = 0; i < 4; i++) {
digitalWrite(signals[i][0], HIGH); // Merah ON
}
delay(allRedTime);
}