// LCD2004 and Pi Pico!
/*-data-type------size---------description-----
  boolean        (8 bit)   -  [true/false]
  byte           (8 bit)   -  [0-255] unsigned number
  char           (8 bit)   -  [-128 to 127] signed number
  unsigned char  (8 bit)   -  [-128 to 127] signed number
  word           (16 bit)  -  [0-65535] unsigned number
  unsigned int   (16 bit)  -  [0-65535] unsigned number
  int            (16 bit)  -  [-32768 to 32767] signed number
  unsigned long  (32 bit)  -  [0-4,294,967,295] unsigned number usually for millis
  long           (32 bit)  -  [-2,147,483,648 to 2,147,483,647] signed number
  float          (32 bit)  -  [-3.4028235E38 to 3.4028235E38] signed number
  uint8_t        (8 bit)   -  [0-255] unsigned number
  int8_t         (8 bit)   -  [-127 - 127] signed number
  uint16_t       (16 bit)  -  [0-65,535] unsigned number
  int16_t        (16 bit)  -  [-32,768 - 32,767] signed number
  uint32_t       (32 bit)  -  [0-4,294,967,295] unsigned number
  int32_t        (32 bit)  -  [-2,147,483,648 - 2,147,483,647] signed number
  uint64_t       (64 bit)  -  [0-18,446,744,073,709,551,615] unsigned number
  int64_t        (64 bit)  -  [−9,223,372,036,854,775,808 - 9,223,372,036,854,775,807] signed number
  --------------------------------------------
  camelCase                -  anything that changes
  snake_case               -  variable's that are exclusive in a function
  Snake_Case               -  CLASS/struct exclusave varables/functions
  iNVERTEDcAMELcASE        -  outside code that is being accessed [database]
  SNake_CAse               -  duplicate varables inside the case function [frequently used in library names]
  ALL_CAPS                 -  const varable names or defines
  -------------by-jediRick--------------------
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int32_t hour = 24, minute = 59, second = 50, day = 22, month = 7, year = 2022;
void setup() {
  Wire.setSDA(8);
  Wire.setSCL(9);
  Wire.begin();
  lcd.init();
  lcd.backlight();
  lcd.begin(0, 2);
  lcd.setCursor(3, 1);
  lcd.print("> Pico Clock <");
  delay(2000);
  lcd.clear();
}
void loop() {
  int32_t current_time = (hour * 3600) + (minute * 60) + second; //trying to calculate the time
  int32_t time_seconds = current_time + (millis() / 1000);
  if (time_seconds >= 0) {
    int32_t time_hour = time_seconds / 3600 - 1;
    int32_t time_minute = ((time_seconds / 60) % 60);
    int32_t time_sec = time_seconds % 60;
    if (time_hour >= 24) { //reset time and day once we pass 24 hours
      day = day + 1;
      hour = 0;
    }
    lcd.setCursor(6, 1);  // echo time with leading zero
    if (time_hour < 10) {
      lcd.print("0");
    }
    lcd.print(time_hour);
    lcd.print(":");
    if (time_minute < 10) {
      lcd.print("0");
    }
    lcd.print(time_minute);
    lcd.print(":");
    if (time_sec < 10) {
      lcd.print("0");
    }
    lcd.print(time_sec);
    lcd.setCursor(5, 2);
    if (day < 10) {
      lcd.print("0");
    }
    lcd.print(day);
    lcd.print("/");
    if (month < 10) {
      lcd.print("0");
    }
    lcd.print(month);
    lcd.print("/");
    lcd.print(year);
  }
  delay(25);
}