// Definisi pin untuk setiap persimpangan
const int trafficLights[4][3] = {
{23, 22, 21}, // Persimpangan 1: Merah, Kuning, Hijau
{19, 18, 5}, // Persimpangan 2: Merah, Kuning, Hijau
{26, 27, 14}, // Persimpangan 3: Merah, Kuning, Hijau
{32, 33, 25} // Persimpangan 4: Merah, Kuning, Hijau
};
const int delayRed = 1000; // Waktu lampu merah untuk masing-masing persimpangan
const int delayYellow = 2000; // Waktu lampu kuning (2 detik)
const int maxGreenTime = 10000; // Nilai maksimum lampu hijau (10 detik)
int trafficDensity[4] = {3, 5, 2, 7}; // Kepadatan lalu lintas (skala 1-10)
int calculateGreenTime(int density) {
return map(density, 1, 10, 3000, maxGreenTime);
}
void setup() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
pinMode(trafficLights[i][j], OUTPUT);
}
}
for (int i = 0; i < 4; i++) {
digitalWrite(trafficLights[i][0], HIGH);
}
}
void loop() {
for (int i = 0; i < 4; i++) {
int greenTime = calculateGreenTime(trafficDensity[i]);
// Nyalakan lampu hijau di persimpangan saat ini
digitalWrite(trafficLights[i][2], HIGH);
digitalWrite(trafficLights[i][0], LOW);
delay(greenTime);
// Nyalakan lampu kuning di persimpangan saat ini
digitalWrite(trafficLights[i][2], LOW);
digitalWrite(trafficLights[i][1], HIGH);
delay(delayYellow);
// Nyalakan lampu merah di persimpangan saat ini
digitalWrite(trafficLights[i][1], LOW);
digitalWrite(trafficLights[i][0], HIGH);
delay(delayRed);
}
}