#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

unsigned long previousTime = 0;
const long interval = 1000;

int godziny = 0;//saat
int minuty = 0;//dakika
int sekundy = 0;//saniye
bool czyDziala = false;

void setup() 
{
  lcd.begin(16, 2);
  Serial.begin(9600);
  Serial.println("Seçenekleri seçin:");
  Serial.println("1-Sayma süresini 00:00:00'dan itibaren başlatın.");
  Serial.println("2-Geçerli saati girin:");
  Serial.println("3-Reset");
}

void loop() 
{
  if (Serial.available()) 
  {
    char opcja = Serial.read(); 
    if (opcja == '1') 
    {
      czyDziala = true;
    } 

    else if (opcja == '2') 
    {
      ustawCzas();
      czyDziala = true; 
    } 

    else if (opcja == '3') 
    {
      resetuj();
      lcd.clear();
      lcd.setCursor(0, 0);
      Serial.println("Seçenekleri seçin:");
      Serial.println("1-Sayma süresini 00:00:00'dan itibaren başlatın.");
      Serial.println("2-Geçerli saati girin:");
      Serial.println("3-Reset");
    }
  }

  if (czyDziala) 
  {
    if (millis() - previousTime >= interval) 
    {
      previousTime = millis();
      zwiekszCzas();
      wyswietl();
    }
  }
}

void zwiekszCzas() 
{
  sekundy++;
  if (sekundy >= 60) 
  {
    minuty++;
    sekundy = 0;
  }
  if (minuty >= 60) 
  {
    godziny++;
    minuty = 0;
  }
  if (godziny >= 24) 
  {
    godziny = 0;
  }
}

void wyswietl() 
{
  lcd.clear();
  lcd.setCursor(0, 0);

  if (godziny < 10) 
    lcd.print('0');
  lcd.print(godziny);

  lcd.print(":");

  if (minuty < 10) 
    lcd.print('0');
  lcd.print(minuty);

  lcd.print(":");

  if (sekundy < 10)  
    lcd.print('0');
  lcd.print(sekundy);
}

void ustawCzas() 
{
  Serial.println("Saat Dilimini Geçerli Bir Formatta Yazın Saat:Dakika:Saniye");

  while (Serial.available() < 8){}

  godziny = Serial.parseInt();
  Serial.read(); 
  minuty = Serial.parseInt();
  Serial.read(); 
  sekundy = Serial.parseInt();
  
  if (godziny < 0 || godziny >= 24 || minuty < 0 || minuty >= 60 || sekundy < 0 || sekundy >= 60) 
  {
    Serial.println("Geçersiz zaman. Tekrar deneyin.");
    godziny = 0;
    minuty = 0;
    sekundy = 0;
  }
}

void resetuj() 
{
  czyDziala = false; 
  godziny = 0;
  minuty = 0;
  sekundy = 0;
  wyswietl(); 
}