/*
Nama : Muhammad Faris Susanto
No : 23
Kelas : XII-4
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// PIN LED PENYEBRANGAN
int ledSebrang_M = 3;
int ledSebrang_H = 2;
// PIN LED LAMPU LALU LINTAS
int ledMerah = 6;
int ledKuning = 5;
int ledHijau = 4;
// PIN BUTTON
int btn = 7;
int btnstate = 0;
int lastBtnState = 0;
bool isPressed = false;
enum LampuStatus {MERAH, KUNING, HIJAU}; // Membagi status lampu
LampuStatus statusLaluLintas = HIJAU; //Mengawali dengan status lampu warna hijau
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
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);
digitalWrite(ledSebrang_M, HIGH);
lcd.setCursor(3,0);
lcd.print("HATI HATI");
}
void loop() {
btnstate = digitalRead(btn);
// Mengecek apakah status tombol yang 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
lcd.clear();
lcd.setCursor(3,0);
lcd.print("HATI HATI");
// 1. Matikan lampu hijau lalu lintas, nyalakan lampu kuning
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, HIGH);
delay(3000);
lcd.clear();
// 2. Matikan lampu kuning, nyalakan lampu merah lalu lintas
lcd.setCursor(3,0);
lcd.print("BERHENTI!!");
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, HIGH);
// 3. Matikan lampu merah penyebrangan, nyalakan lampu hijau penyebrangan
digitalWrite(ledSebrang_M, LOW);
digitalWrite(ledSebrang_H, HIGH);
delay(5000);
// 4. Matikan ampu hjau penyebrangan, mulai nyalakan lampu kuning
digitalWrite(ledMerah, LOW);
digitalWrite(ledKuning, HIGH);
digitalWrite(ledSebrang_H, LOW);
digitalWrite(ledSebrang_M, HIGH);
delay(3000);
lcd.clear();
// 5. Kembalikan ke kondisi awal
lcd.setCursor(3,0);
lcd.print("HATI HATI");
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, LOW);
digitalWrite(ledHijau, HIGH);
// Kembali ke lampu hijau saat proses susah selesai
statusLaluLintas = HIJAU;
}
// Menyimpan status tombol terakhir untuk pengecekan perubahan status tombol
lastBtnState = btnstate;
}