// //---LCD I2C
// #include <LiquidCrystal_I2C.h>
// LiquidCrystal_I2C lcd(0x27, 20, 4);
// char kursor = 0;
// int jam;
// long Delay = 500;
// //---Button Menu
// #define BUP 25
// #define BOK 27
// #define BDN 29
// #define PUSH LOW //Ditekan
// #define BOUN 10 //Bouncing
// void setup() {
// Serial.begin(115200);
// // LCD Init
// lcd.init();
// lcd.backlight();
// pinMode(BUP, INPUT_PULLUP);
// pinMode(BOK, INPUT_PULLUP);
// pinMode(BDN, INPUT_PULLUP);
// lcd.clear();
// }
// void loop() {
// lcd.setCursor(3,0);
// lcd.print(String() +jam);
// lcd.setCursor(kursor,0);
// kedip();
// if(digitalRead(BOK) == PUSH){
// delay(BOUN);
// while(digitalRead(BOK) == PUSH){}
// kanan();
// }
// else if(digitalRead(BUP) == PUSH){
// delay(BOUN);
// while(digitalRead(BUP) == PUSH){}
// naik();
// }
// else if(digitalRead(BDN) == PUSH){
// delay(BOUN);
// while(digitalRead(BDN) == PUSH){}
// turun();
// }
// }
// void kanan(){
// kursor++;
// delay(5);
// }
// void naik(){
// if (kursor==3){
// jam++;
// if (jam>9) jam=0;}
// }
// void turun(){
// if (kursor==3){
// jam--;
// if (jam<0) jam=9;}
// }
// void kedip(){
// //---kursor kedip
// unsigned long sebelumnya;
// unsigned long sekarang = millis();
// if(sekarang - sebelumnya >= Delay){
// sebelumnya = sekarang;
// lcd.cursor();
// delay(200);
// lcd.noCursor();
// delay(200);
// }
// }
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD dengan alamat 0x27
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Pin tombol
const int buttonUpPin = 25;
const int buttonSetPin = 27;
const int buttonDownPin = 29;
int counter = 0; // Variabel untuk menyimpan nilai counter
bool setMode = false; // Mode set (on/off)
// Untuk mendebounce tombol
int lastButtonUpState = LOW;
int lastButtonSetState = LOW;
int lastButtonDownState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
lcd.init();
lcd.backlight();
pinMode(buttonUpPin, INPUT);
pinMode(buttonSetPin, INPUT);
pinMode(buttonDownPin, INPUT);
// Tampilkan nilai awal pada LCD
lcd.setCursor(0, 0);
lcd.print("Counter: ");
lcd.setCursor(0, 1);
lcd.print(counter);
}
void loop() {
int buttonUpState = digitalRead(buttonUpPin);
int buttonSetState = digitalRead(buttonSetPin);
int buttonDownState = digitalRead(buttonDownPin);
if ((buttonUpState != lastButtonUpState) && (millis() - lastDebounceTime > debounceDelay)) {
if (buttonUpState == HIGH && !setMode) {
counter+=10;
updateLCD();
}
lastDebounceTime = millis();
}
if ((buttonSetState != lastButtonSetState) && (millis() - lastDebounceTime > debounceDelay)) {
if (buttonSetState == HIGH) {
setMode = !setMode; // Toggle mode set
updateLCD();
}
lastDebounceTime = millis();
}
if ((buttonDownState != lastButtonDownState) && (millis() - lastDebounceTime > debounceDelay)) {
if (buttonDownState == HIGH && !setMode) {
counter-=10;
updateLCD();
}
lastDebounceTime = millis();
}
// Simpan status tombol terakhir
lastButtonUpState = buttonUpState;
lastButtonSetState = buttonSetState;
lastButtonDownState = buttonDownState;
}
// Fungsi untuk mengupdate tampilan LCD
void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Counter: ");
lcd.setCursor(0, 1);
lcd.print(counter);
if (setMode) {
lcd.setCursor(10, 1);
lcd.print("SET");
}
}