int ledSebrang_M = 3; // Lampu merah penyebrangan
int ledSebrang_H = 2; // Lampu hijau penyebrangan
int ledMerah = 10; // Lampu merah lalu lintas
int ledKuning = 9; // Lampu kuning lalu lintas
int ledHijau = 8; // Lampu hijau lalu lintas
int btn = 5; // Tombol
int btnstate = 0; // Status tombol
int lastBtnState = 0; // Menyimpan status tombol terakhir
bool isPressed = false; // Menyimpan status tombol ditekan atau tidak
enum LampuStatus {MERAH, KUNING, HIJAU}; // Menentukan status lampu
LampuStatus statusLaluLintas = HIJAU; // Status awal lampu lalu lintas
void setup() {
Serial.begin(9600);
pinMode(ledSebrang_M, OUTPUT);
pinMode(ledSebrang_H, OUTPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(btn, INPUT);
// Kondisi awal
digitalWrite(ledHijau, HIGH); // Lampu hijau lalu lintas menyala
digitalWrite(ledSebrang_M, HIGH); // Lampu merah penyebrangan menyala
}
void loop() {
btnstate = digitalRead(btn); // Membaca status tombol
// Mengecek apakah tombol ditekan dan jika tombol berubah dari tidak ditekan ke ditekan
if (btnstate == HIGH && lastBtnState == LOW) {
isPressed = true;
}
// Jika tombol ditekan dan lampu sedang dalam status HIJAU, mulai proses
if (isPressed && statusLaluLintas == HIJAU) {
isPressed = false; // Reset status tombol agar tidak berulang
statusLaluLintas = MERAH; // Set status untuk proses perubahan
// 1. Matikan lampu hijau lalu lintas, nyalakan lampu kuning
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, HIGH);
delay(3000); // Tunggu 3 detik
// 2. Matikan lampu kuning, nyalakan lampu merah lalu lintas
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, HIGH);
// 3. Matikan lampu merah penyebrangan, nyalakan lampu hijau penyebrangan
digitalWrite(ledSebrang_M, LOW);
digitalWrite(ledSebrang_H, HIGH);
delay(4500); // Tunggu 4,5 detik
// 4. Kembalikan ke kondisi awal
digitalWrite(ledMerah, LOW);
digitalWrite(ledSebrang_H, LOW);
digitalWrite(ledSebrang_M, HIGH);
digitalWrite(ledHijau, HIGH);
// Ubah status lampu lalu lintas ke HIJAU
statusLaluLintas = HIJAU; // Kembali ke status hijau setelah proses selesai
}
// Menyimpan status tombol terakhir untuk pengecekan perubahan status tombol
lastBtnState = btnstate;
}