#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int upButtonPin = 8;
int downButtonPin = 9;
int selectButtonPin = 10;
int ledPin1 = 5;
int ledPin2 = 6;
int ledPin3 = 7;
int upButtonState = 0;
int downButtonState = 0;
int selectButtonState = 0;
int lastupButtonState = 0;
int lastdownButtonState = 0;
int lastselectButtonState = 0;
int menuitem = 1;
int page = 1;
volatile boolean upButtonPressed = false;
volatile boolean downButtonPressed = false;
volatile boolean selectButtonPressed = false;
void setup() {
pinMode(upButtonPin, INPUT_PULLUP);
pinMode(downButtonPin, INPUT_PULLUP);
pinMode(selectButtonPin, INPUT_PULLUP);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
lcd.begin();
lcd.backlight();
lcd.clear();
}
void drawMenu() {
lcd.setCursor(0, 0);
lcd.print("Menu : ");
lcd.setCursor(0, 1);
switch (menuitem) {
case 1:
lcd.print("Lampu 1");
break;
case 2:
lcd.print("Lampu 2");
break;
case 3:
lcd.print("Lampu 3");
break;
}
}
void loop() {
drawMenu();
upButtonState = digitalRead(upButtonPin);
downButtonState = digitalRead(downButtonPin);
selectButtonState = digitalRead(selectButtonPin);
checkIfupButtonIsPressed();
checkIfdownButtonIsPressed();
checkIfselectButtonIsPressed();
if (upButtonPressed && page == 1) {
upButtonPressed = false;
menuitem--;
if (menuitem == 0) {
menuitem = 3;
}
} else if (downButtonPressed && page == 1) {
downButtonPressed = false;
menuitem++;
if (menuitem == 4) {
menuitem = 1;
}
}
if (selectButtonPressed && page == 1) {
selectButtonPressed = false;
switch (menuitem) {
case 1:
digitalWrite(ledPin1, !digitalRead(ledPin1));
break;
case 2:
digitalWrite(ledPin2, !digitalRead(ledPin2));
break;
case 3:
digitalWrite(ledPin3, !digitalRead(ledPin3));
break;
}
}
}
void checkIfupButtonIsPressed() {
if (upButtonState != lastupButtonState) {
if (upButtonState == LOW) {
upButtonPressed = true;
}
delay(50); // Debouncing
}
lastupButtonState = upButtonState;
}
void checkIfdownButtonIsPressed() {
if (downButtonState != lastdownButtonState) {
if (downButtonState == LOW) {
downButtonPressed = true;
}
delay(50); // Debouncing
}
lastdownButtonState = downButtonState;
}
void checkIfselectButtonIsPressed() {
if (selectButtonState != lastselectButtonState) {
if (selectButtonState == LOW) {
selectButtonPressed = true;
}
delay(50); // Debouncing
}
lastselectButtonState = selectButtonState;
}