/*
Naloge se točkujejo skladno s sklepom aktiva za računalištvo.
50-60% = 2
64-76% = 3
77-89% = 4
90-100% = 5

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)
*/


#define LED3 3
#define LED4 4

bool st_vnosov_kode = false;
int spr_utripanje = 3;

#include <LiquidCrystal_I2C.h>

#define I2C_ADDR      0x27
#define LCD_COLUMNS   16
#define LCD_LINES     2

LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

#define KODA1_on 777111
#define KODA2_on 777333
#define KODA2_off 777330
#define KODA3_10x 777444


void setup() {
  Serial.begin(9600);
  Serial.println("Vpisi kodo: ");
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  lcd.init();
  lcd.print("Vpisi kodo:");
}


void loop() {
  if (Serial.available()) {
    char vpis[6];
    int steviloZnakovVpis = Serial.readBytes(vpis, 6);
    if (steviloZnakovVpis < 6) {
       Serial.println("poskusi ponovno");
      lcd.setCursor(0,1);
      lcd.clear();
      lcd.print("poskusi ponovno");
    }
    
    else if (steviloZnakovVpis > 6) {
      Serial.println("poskusi ponovno");
      lcd.setCursor(0,1);
      lcd.clear();
      lcd.print("poskusi ponovno");
    }
    else if (steviloZnakovVpis == 6) {
      int stevilka = atoi(vpis);          // STR to INT
      switch(stevilka) {
        case KODA1_on:
          if (st_vnosov_kode == false)  {
            lcd.setCursor(0,1);
            lcd.clear();
            digitalWrite(LED3, HIGH);
            lcd.print("LED3 vklop");
            st_vnosov_kode = true;
          }
          else {
            lcd.setCursor(0,1);
            lcd.clear();
            digitalWrite(LED3, LOW);
            lcd.print("LED3 izklop");
            st_vnosov_kode = false;
          }
          break;
        
        case KODA2_on:
          Serial.println("LED4 vklop");
          utripanje();
          lcd.setCursor(0,1);
          lcd.clear();
          lcd.print("LED4 vklop");
          break;

        case KODA2_off:
          Serial.println("LED4 izklop");
          digitalWrite(LED4, LOW);
          lcd.setCursor(0,1);
          lcd.clear();
          lcd.print("LED4 izklop");
          break;

        case KODA3_10x:
          Serial.println("LED4 utrip 10x");
          utripanje_10x();
          lcd.setCursor(0,1);
          lcd.clear();
          lcd.print("LED4 utrip 10x");
          break;

        default:
          Serial.println("poskusi ponovno");
          lcd.clear();
          lcd.print("poskusi ponovno");
          while (Serial.available()) Serial.read();
          break;
      }
    }
  }
}

void utripanje() {
  while (spr_utripanje != 4) {
    digitalWrite(LED4, HIGH);
    delay(250);
    digitalWrite(LED4, LOW);
    delay(250);
  }
}

void utripanje_10x() {
  for (int x = 0; x < 10; x++) {
    digitalWrite(LED4, HIGH);
    delay(250);
    digitalWrite(LED4, LOW);
    delay(250);
  }

  /*
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);
  digitalWrite(LED4, HIGH);
  delay(250);
  digitalWrite(LED4, LOW);
  delay(250);*/
}


uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
led2:A
led2:C
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL