#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int ledPins[] = {11, 10, 9}, buttonPins[] = {A0, A1, A2};
int currentLED = 0, brightness[] = {0, 0, 0};
void setup() {
LCD_setup(); Serial.begin(9600);
for (int i = 0; i < 3; i++) pinMode(ledPins[i], OUTPUT);
for (int i = 0; i < 3; i++) pinMode(buttonPins[i], INPUT_PULLUP);
}
void LCD_setup() {
lcd.begin(40, 4); lcd.backlight();
lcd.setCursor(0,0); lcd.print("LED Dipilih : 1");
lcd.setCursor(0,1); lcd.print("LED 1 Glow : ");
lcd.setCursor(0,2); lcd.print("LED 2 Glow : ");
lcd.setCursor(0,3); lcd.print("LED 3 Glow : ");
}
void loop() {
static bool initialPrint = true;
if (initialPrint) {
Serial.println("TombolMerah : Pilih LED");
Serial.println("TombolKuning : (-) PWM LED");
Serial.println("TombolHijau : (+) PWM LED");
Serial.println(currentLED + 1); initialPrint = false;
}
if (digitalRead(buttonPins[0]) == LOW) {
currentLED = (currentLED + 1) % 3;
lcd.setCursor(0,0); lcd.print("LED Dipilih : " + String(currentLED + 1));
delay(300);
}
if (digitalRead(buttonPins[1]) == LOW) {
brightness[currentLED] = max(0, brightness[currentLED] - 1);
lcd.setCursor(0,(currentLED + 1));
lcd.print("LED " + String(currentLED + 1) + " Glow : " + String(brightness[currentLED]) + " ");
delay(50);
}
if (digitalRead(buttonPins[2]) == LOW) {
brightness[currentLED] = min(255, brightness[currentLED] + 1);
lcd.setCursor(0,(currentLED + 1));
lcd.print("LED " + String(currentLED + 1) + " Glow : " + String(brightness[currentLED]) + " ");
delay(50);
}
for (int i = 0; i < 3; i++) analogWrite(ledPins[i], brightness[i]);
}