// //---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");
  }
}