#include <LiquidCrystal_I2C.h>
#define I2C_ADDR    0x27
#define LCD_COLUMNS 20
#define LCD_LINES   2

LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

#define LED3 3
#define LED4 5
#define KODA_VKLOP_izklop 111
#define KODA_utripanje 333

#define KODA_UTRIPANJE_10X 444
bool vklop = false;
bool UTRIP = false;
bool UTRIP_10x = false;
int utripCounter=0;
unsigned long TrenutniCas;
int zakasnitev = 200;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
 Serial.println("Vnesi kodo:"); 
 pinMode(LED3, OUTPUT);
 pinMode(LED4, OUTPUT);
 lcd.init();
 lcd.backlight();

}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()){
    char vpis[10];
    int steviloZnakovVpis = Serial.readBytesUntil('\n', vpis, sizeof(vpis)-1);
    vpis[steviloZnakovVpis] = '\0';

    if(steviloZnakovVpis > 3 || steviloZnakovVpis < 3){
      Serial.println("Napačen vnos, koda je prekratka oz. predolga");
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Napacen vnos");
    } else if (steviloZnakovVpis == 3) {
      int stevilka = atoi(vpis);
      lcd.setCursor(0,0);
      switch(stevilka) {
        case KODA_VKLOP_izklop:
            if(vklop==false){
              vklop=true;
              digitalWrite(LED3,HIGH);
              lcd.clear();
              lcd.print("Vklopljena LED3");
              Serial.println("Vklopljena LED3");
            }
            else if (vklop==true){
              vklop=false;
              digitalWrite(LED3, LOW);
              lcd.clear();
              lcd.print("Izklopljena LED3");
              Serial.println("Izklopljena LED3");
            }
            break;

      case KODA_utripanje:
        if (UTRIP == false){
          UTRIP=true;
          lcd.clear();
          lcd.print("Vklopljeno Utripanje");
          Serial.println(UTRIP);
          Serial.println("Vklopljeno utripanje");
        }
        else if(UTRIP == true){
          UTRIP = false;
          digitalWrite(LED4, LOW);
          lcd.clear();
          lcd.print("Izklopljeno utripanje");

          Serial.println(UTRIP);
          Serial.println("Izklopljeno utripanje");
          
        }
        break;

      case KODA_UTRIPANJE_10X:
        if(UTRIP_10x==false){
          UTRIP_10x = true;
          utripCounter=0;
          lcd.clear();
          lcd.print("Utripanje 10x");
          Serial.println("Utripanje 10x");

        }
        break;
      default:
        lcd.clear();
        lcd.print("Koda ne obstaja");
        Serial.println("Koda ne obstaja");
        break;

      }
    }
  }
  utripanjeLED4();
}

void utripanjeLED4() {
  static bool m = false;
  if (((millis() - TrenutniCas) > zakasnitev)) {
    TrenutniCas = millis();

    if (UTRIP) {
      m = !m;
      digitalWrite(LED4, m);
    }

    if (UTRIP_10x) {
      m = !m;
      digitalWrite(LED4, m);
      if (!m) {
        utripCounter++;
        if (utripCounter >= 10) {
          UTRIP_10x = false;
          digitalWrite(LED4, LOW);
        }
      }
    }
  }
}