#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); 

int buzeris = 13;            //buzerio realus bus 13
int rele = 12;               //pakeista is 7
int Led1 = 11;	             //pakeista is 12
int Counter = 0;
int kord = 8;
int mygtukas1 = 2;   //Mygtukas 1 yra is sejamosios, didina counteri su  sek uzlaikymu.     
int mygtukas2 = 3;   // rezervas 
int mygtukas3 = 4;   // rezervas 
int mygtukas4 = 5;   // Resetas counterio pakeista is 5
int mygtukas5 = 6;   // rezervas


int buttonState = 0;           
int lastButtonState = LOW;  
int buttonState1 = 0;           
int lastButtonState1 = LOW; 
int buttonState4 = 0;           
int lastButtonState4 = LOW;

int prevButtonState = LOW;


unsigned long lastDebounceTime = 0; 
unsigned long debounceDelay = 200;    // Laikas kuris nurodo kiek laiko turi buti mygtukas paspaustas, del netikru paspaudimu.


unsigned long buzer_off_laikas = 1000;// OFF time for LED
unsigned long buzer_on_laikas = 1000;// ON time for LED
unsigned long rememberTime=0; // visi sitie 4 migsejimo parametrai 

void setup(){
  lcd.init();
  lcd.backlight();
  pinMode(mygtukas1, INPUT);
  pinMode(rele, OUTPUT);
  pinMode(Led1, OUTPUT);
  pinMode(buzeris, OUTPUT);   // buzeris kaip out

  lcd.setCursor(1,0);
  lcd.print("T. Malinausko ukis");
 
  Serial.begin(9600); 
}


void Automatinis (){

     int reading = digitalRead(mygtukas1);

  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) >= debounceDelay) {
   
    if (reading != buttonState) {
      buttonState = reading;

    
      if (buttonState == HIGH) {
       
         Counter = Counter +1;         
         lcd.setCursor(0,2);
         lcd.print(" Ciklas:");
         lcd.setCursor(kord,2);
         lcd.print(Counter);
         Serial.println(Counter);
        
       
      } 
    } 
  }
  
   if (Counter == 5 && lastButtonState == HIGH ) {
           
      digitalWrite(Led1, HIGH);
      digitalWrite(rele, HIGH);     
      lcd.setCursor(0,3);
      lcd.print("*daroma tech. veze*");
                 
  }            
       //resetas counterio  ""Counter == 5"" kiek vagu
  if (Counter == 5 && lastButtonState == LOW){
     delay(1000);
     digitalWrite(Led1, LOW);
     digitalWrite(rele, LOW);
      Counter = 0;
      lcd.clear();
     } else {
        lcd.setCursor(1,0);
        lcd.print("T. Malinausko ukis");
        lcd.setCursor(0,2);
        lcd.print(" Ciklas:");
        lcd.setCursor(kord,2);
        lcd.print(Counter);    

           }
delay(5);
  lastButtonState = reading;  
//   ----------------------   reseto mygtukas -------------------
int reading4 = digitalRead(mygtukas4);

  if (reading4 != lastButtonState4) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) >= debounceDelay) {
   
    if (reading4 != buttonState4) {
      buttonState4 = reading4;
          
      if (buttonState4 == HIGH) {         
      Counter = 0;
      lcd.clear();
     } else {
        lcd.setCursor(1,0);
        lcd.print("T. Malinausko ukis");
        lcd.setCursor(0,2);
         lcd.print(" Ciklas:");
         lcd.setCursor(kord,2);
         lcd.print(Counter);     
     }
      }  
        }
  delay(5);
  lastButtonState4 = reading4;
}
           
//-----------------kodukas buzeriui------------------------- && buzer_state == LOW


void garsine_indikacija ()
{
    if (prevButtonState == LOW && buttonState == HIGH)
    {
        digitalWrite(buzeris, HIGH);
        rememberTime = millis();
    }
    if (millis() - rememberTime > buzer_on_laikas)
        digitalWrite(buzeris, LOW);
    prevButtonState = buttonState;
}





// -------------------     ---------------------------------------
void loop() {
  

   Automatinis();
   garsine_indikacija ();
 

}