#define RED_LED 2
#define YELLOW_LED 3
#define GREEN_LED 4
#define TRIGGER_PIN 5
#define ECHO_PIN 6
#define BUZZER_PIN 7
long duration;
int distance;
void setup() {
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(RED_LED, HIGH); // Merah menyala saat setup
delay(2000); // Tunggu 2 detik
digitalWrite(RED_LED, LOW); // Matikan lampu merah
}
void loop() {
// Ukur jarak menggunakan sensor ultrasonik
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
// Logika lampu lalu lintas berdasarkan jarak
if (distance < 20) { // Jarak kurang dari 20 cm, lampu merah dan peringatan
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, LOW);
tone(BUZZER_PIN, 4000); // Bunyikan buzzer dengan frekuensi 4000 Hz
delay(1000); // Tahan suara selama 1 detik
noTone(BUZZER_PIN); // Matikan buzzer
delay(500); // Tunggu 0,5 detik
} else if (distance >= 20 && distance < 40) { // Jarak 20-40 cm, lampu kuning dan peringatan
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
tone(BUZZER_PIN, 1000); // Bunyikan buzzer dengan frekuensi 1000 Hz
delay(1000); // Tahan suara selama 1 detik
noTone(BUZZER_PIN); // Matikan buzzer
delay(1000); // Tunggu 1 detik
} else { // Jarak lebih dari 40 cm, lampu hijau dan matikan buzzer
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
tone(BUZZER_PIN, 500); // Bunyikan buzzer dengan frekuensi 500 Hz
delay(500); // Tahan suara selama 0,5 detik
noTone(BUZZER_PIN); // Matikan buzzer
delay(500); // Tahan suara selama 0,5 detik
}
}