#include <LiquidCrystal_I2C.h>


//LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
LiquidCrystal_I2C lcd(0x27, 16, 2);

#define I2C_ADDR    0x27   // address 
#define LCD_COLUMNS 20   // ตำแหน่ง ตาม row
#define LCD_LINES   4   // row 0,1,2,3 บรรทัด

int st, setTime, setUp, setDw = 0;
int hr, mi, se = 0;
bool setHour, swHr, swMi, swSe;
String txHr, txMi, txSe;


//String Str5[8];
//Str5[8];


void setup() {
  lcd.init();    // initial device
  lcd.backlight();
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  Serial.begin(115200);
}

void loop() {

  // set  1= set Hour,2 = set = Munite , 3 = Second

  lcd.setCursor(0, 0);
  lcd.print("Set Time" );

  lcd.setCursor(1, 1);

  lcd.print(hr);
  lcd.setCursor(3, 1); lcd.print(":");

  lcd.setCursor(4, 1);lcd.print(mi);

  lcd.setCursor(6, 1); lcd.print(":");
  lcd.setCursor(7, 1); lcd.print(se);

  setTime = digitalRead(8); delay(100);
  // count 1 to 3 time.
  Serial.print(" Set Time :"); Serial.print(st);
  if (setTime == 0) {
    st++;
    if (st >= 5 ) {
      st = 0;
    }
  }
  //st = 1 for set hour
  setHH();
  //st = 2 for set minute
  setMM();
  //st = 3 for set second
  setSS();

}



void setHH() {

  if (st == 1) {
    txHr = st;
    Serial.print(" Hour :"); Serial.print(st);
    delay(400);
    setUp = digitalRead(9); delay(100);
    if (setUp == 0) {
      hr++;
      if (hr >= 24) {
        hr = 0;
      }
    }
    setDw = digitalRead(10); delay(100);
    if (setDw == 0) {
      hr--;
      if (hr <= 0) {
        hr = 0;
      }
    }
    lcd.clear();
    delay(100);
  }
}


void setMM() {
  if (st == 2) {
    Serial.print(" Minute :"); Serial.print(st);
    setUp = digitalRead(9); delay(100);
    if (setUp == 0) {
      mi++;
      if (mi >= 60) {
        mi = 0;
      }
    }

    setDw = digitalRead(10); delay(100);
    if (setDw == 0) {
      mi--;
      if (mi <= 0) {
        mi = 0;
      }
    }
    lcd.clear();
    delay(100);
  }

}

void setSS() {

  if (st == 3) {
    Serial.print(" Second :"); Serial.print(st);
    setUp = digitalRead(9); delay(100);
    if (setUp == 0) {
      se++;
      if (se >= 60) {
        se = 0;
      }
    }

    setDw = digitalRead(10); delay(100);
    if (setDw == 0) {
      se--;
      if (se <= 0) {
        se = 0;
      }
    }
    lcd.clear();
    delay(100);
  }
}