#include <LiquidCrystal_I2C.h>
// LED and Button pins
int leftLEDm = 2;
int leftLEDh = 5;
int rightLEDh = 1;
int rightLEDm = 6;
int alertLEDR = 8;
int alertLEDL = 9;
int btnYellow = 3;
int btnBlue = 4;
int buzzer = 7;
// I2C LCD setup
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
// Initialize LEDs and buzzer
pinMode(leftLEDm, OUTPUT);
pinMode(leftLEDh, OUTPUT);
pinMode(rightLEDh, OUTPUT);
pinMode(rightLEDm, OUTPUT);
pinMode(alertLEDL, OUTPUT);
pinMode(alertLEDR, OUTPUT);
pinMode(btnYellow, INPUT);
pinMode(btnBlue, INPUT);
pinMode(buzzer, OUTPUT);
// Initialize I2C LCD
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
int buttonStateY = digitalRead(btnYellow);
int buttonStateB = digitalRead(btnBlue);
if (buttonStateY == HIGH) {
digitalWrite(leftLEDm, LOW);
digitalWrite(leftLEDh, HIGH);
digitalWrite(rightLEDh, LOW);
digitalWrite(rightLEDm, HIGH);
// Display message on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tolong berhenti");
lcd.setCursor(0, 1);
lcd.print("");
// Sound buzzer with alertLEDL blinking
for (int i = 0; i < 3; i++) {
tone(buzzer, 1000);
digitalWrite(alertLEDL, HIGH);
digitalWrite(alertLEDR, LOW);
delay(250);
noTone(buzzer);
digitalWrite(alertLEDL, LOW);
delay(250);
}
} else if (buttonStateB == HIGH) {
digitalWrite(leftLEDm, HIGH);
digitalWrite(leftLEDh, LOW);
digitalWrite(rightLEDh, HIGH);
digitalWrite(rightLEDm, LOW);
// Display message on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tolong berhenti");
lcd.setCursor(0, 1);
lcd.print("");
// Sound buzzer with alertLEDR blinking
for (int i = 0; i < 3; i++) {
tone(buzzer, 1000);
digitalWrite(alertLEDL, LOW);
digitalWrite(alertLEDR, HIGH);
delay(250);
noTone(buzzer);
digitalWrite(alertLEDR, LOW);
delay(250);
}
} else {
digitalWrite(leftLEDm, LOW);
digitalWrite(leftLEDh, LOW);
digitalWrite(rightLEDm, LOW);
digitalWrite(rightLEDh, LOW);
digitalWrite(alertLEDL, LOW);
digitalWrite(alertLEDR, LOW);
noTone(buzzer);
lcd.clear();
}
}