/*
NALOGA 1) 
Napiši program, ki bere niz znakov (6 znakov) 
iz serijskega porta.
- Če je znakov več ali manj kot 6, naj se 
na serijskem portu izpiše: "Napaka, ponovni vnos." 
(1 točka)
- Ob prvem nizu znakov 777111, se prižge LED3, 
ki je priključena na pin 3. (1 točka)
- Ob drugem nizu znakov 777111, se ugasne LED3, 
ki je priključena na pin 3. (1 točka). 
- Če niz znakov ustreza številki 777333, začne 
utripati LED4, ki je priključena na pin 4. (1 točka)
  Za utripanje uporabi funkcijo millis().
- Če niz znakov ustreza številki 777330, ugasnemo 
LED4, ki je priključena na pin 4. (1 točka)
- Priključi LCD display I2C, ki izpisuje posamezna 
stanja: npr. LED3 vklop, LED3 izklop, LED4 utrip, 
LED4 izklop (1 točka)
- Za utripanje LED uporabi funkcijo void npr. void 
utripanje ... (2 točki)
- Če niz znakov ustreza številki 777444, LED4 dioda 
10 x utripne. (2 točki)
*/

#include <LiquidCrystal_I2C.h>

#define koda3 777111
#define koda4_on 777333
#define koda4_off 777330
#define koda5 777444
#define led3 3
#define led4 4

int del = 500;
int currTime = 0;
int stevecZnakov;
int index = 0;
long koda;
bool LED3 = false;
bool LED4 = false;
bool utrip = false;
bool m = LOW;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(115200);
  Serial.println("Vnesi kodo: ");
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("LED3: off");
  lcd.setCursor(0, 1);
  lcd.print("LED4: off");
}

void loop() {
  if (Serial.available()) {
    char vpis[6];
    int stevZnakovVpis = Serial.readBytes(vpis, 6);
    koda = atol(vpis);
    if (koda == koda3 && LED3 == false) {
      digitalWrite(led3, HIGH);
      LED3 = true;
      lcd.setCursor(0, 0);
      lcd.print("LED3: on ");
    }
    else if (koda == koda3 && LED3 == true) {
      digitalWrite(led3, LOW);
      LED3 = false;
      lcd.setCursor(0, 0);
      lcd.print("LED3: off");
    }
    else if (koda == koda4_on) {
      LED4 = true;
      lcd.setCursor(0, 1);
      lcd.print("LED4: on ");
    }
    else if (koda == koda4_off) {
      LED4 = false;
      digitalWrite(led4, LOW);
      lcd.setCursor(0, 1);
      lcd.print("LED4: off");
    }
    else if (koda == koda5) {
      utrip = true;
      LED4 = true;
    }
  }
  if (LED4 == true) {
    if (utrip == true) {
      utripa();
    }
    else {
      utripanje();
    }
  }
}

void utripanje() {
  if (millis() - currTime > del) {
    currTime = millis();
    digitalWrite(led4, m);
    m = !m;
  }
}

void utripa() {
  LED4 = false;
  lcd.setCursor(0, 1);
  lcd.print("LED4: on ");
  utrip = false;
  for (int i = 1; i <= 10; i++) {
    digitalWrite(led4, HIGH);
    delay(400);
    digitalWrite(led4, LOW);
    delay(400);
  }
  lcd.setCursor(0, 1);
  lcd.print("LED4: off");
}