#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LED1_PIN 7
#define LED2_PIN 8
#define BUTTON_MODE 2
#define BUTTON_LED1 3
#define BUTTON_LED2 4
#define BUTTON_AUTO 5
#define LED_DELAY 500
#define AUTO_DELAY 4000
LiquidCrystal_I2C lcd(0x27, 20, 4);
unsigned long last_led1_change_time = 0;
unsigned long last_led2_change_time = 0;
unsigned long last_auto_change_time = 0;
int current_mode = 0;
bool led1_status = false;
bool led2_status = false;
bool auto_mode_active = false;
bool auto_led1_status = false;
bool auto_led2_status = false;
void setup() {
Serial.begin(9600);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(BUTTON_MODE, INPUT_PULLUP);
pinMode(BUTTON_LED1, INPUT_PULLUP);
pinMode(BUTTON_LED2, INPUT_PULLUP);
pinMode(BUTTON_AUTO, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Selamat Datang ");
lcd.setCursor(0, 1);
lcd.print(" di Program Arduino");
lcd.setCursor(0, 2);
lcd.print(" LED Control ");
lcd.setCursor(0, 3);
lcd.print(" Mode Manual ");
}
void loop() {
if (digitalRead(BUTTON_MODE) == LOW) {
delay(250);
if (current_mode == 0) {
current_mode = 1;
lcd.setCursor(0, 3);
lcd.print(" Mode Otomatis ");
last_auto_change_time = millis();
} else {
current_mode = 0;
lcd.setCursor(0, 3);
lcd.print(" Mode Manual ");
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
led1_status = false;
led2_status = false;
auto_led1_status = false;
auto_led2_status = false;
}
}
if (current_mode == 0) {
if (digitalRead(BUTTON_LED1) == LOW) {
delay(250);
led1_status = !led1_status;
digitalWrite(LED1_PIN, led1_status);
if (led1_status) {
lcd.setCursor(0, 3);
lcd.print(" LED1 ON ");
} else {
lcd.setCursor(0, 3);
lcd.print(" LED1 OFF ");
}
}
if (digitalRead(BUTTON_LED2) == LOW) {
delay(250);
led2_status = !led2_status;
digitalWrite(LED2_PIN, led2_status);
if (led2_status) {
lcd.setCursor(11, 3);
lcd.print(" LED2 ON ");
} else {
lcd.setCursor(11, 3);
lcd.print(" LED2 OFF ");
}
}
if (led1_status && millis() - last_led1_change_time >= AUTO_DELAY) {
last_led1_change_time = millis();
if (auto_led1_status) {
auto_led1_status = false;
digitalWrite(LED1_PIN, LOW);
} else {
auto_led1_status = true;
digitalWrite(LED1_PIN, HIGH);
}
}
if (led2_status && millis() - last_led2_change_time >= AUTO_DELAY) {
last_led2_change_time = millis();
if (auto_led2_status) {
auto_led2_status = false;
digitalWrite(LED2_PIN, LOW);
} else {
auto_led2_status = true;
digitalWrite(LED2_PIN, HIGH);
}
}
}
if (current_mode == 1) {
if (digitalRead(BUTTON_AUTO) == LOW) {
delay(250);
auto_mode_active = !auto_mode_active;
if (auto_mode_active) {
lcd.setCursor(0, 3);
lcd.print(" Auto Mode Active ");
} else {
lcd.setCursor(0, 3);
lcd.print(" Auto Mode Inactive ");
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
auto_led1_status = true;
auto_led2_status = true;
}
last_auto_change_time = millis();
}
if (auto_mode_active && millis() - last_auto_change_time >= AUTO_DELAY) {
last_auto_change_time = millis();
auto_led1_status = !auto_led1_status;
auto_led2_status = !auto_led2_status;
digitalWrite(LED1_PIN, auto_led1_status);
digitalWrite(LED2_PIN, auto_led2_status);
}
}
}