/* Napiši program, ki prebere niz znakov iz serijskega porta (4 števke)
Če niz znakov ustreza številki: 
5461 - ipis vklp LED 1 in prižge LED1
5460 - ipis izklop LED 1 in izklopi LED1
1234 - izpis vklop LED 2 in prižge LED2
1230 - ipis izklop LED 2 in izklopi LED2
4545 - izpis utripanje LED 3 in utripa LED3
4540 - ipis izklop LED 3 in ugasne LED3
uporabi switch case stavek
Za utripanje uporabi funkcijo millis()*/

#include <LiquidCrystal_I2C.h>

#define LED1 8
#define LED2 9
#define LED3 10

#define koda1_on 5461
#define koda1_off 5460
#define koda2_on 1234
#define koda2_off 1230
#define koda3_on 4545
#define koda3_off 4540

int del = 500;
int currTime = 0;
bool m = false;
bool ledica3 = false;
//LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(115200);
  Serial.println("Vpiši kodo: ");
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Vpisi kodo: ");
}

void loop() {
  if (Serial.available()) {
    char vpis[5];
    int stevZnakovVpis = Serial.readBytes(vpis, 4);
    if (stevZnakovVpis == 4) {
      vpis[4] = '\0';
      int stevilka = atoi(vpis);
      switch (stevilka) {
        case koda1_on:
          lcd.setCursor(0, 1);
          lcd.print("LED 1: vklop    ");
          Serial.println("LED 1: vklop");
          digitalWrite(LED1, HIGH);
          break;
        case koda1_off:
          lcd.setCursor(0, 1);
          lcd.print("LED 1: izklop   ");
          Serial.println("LED 1: izklop");
          digitalWrite(LED1, LOW);
          break;
        case koda2_on:
          lcd.setCursor(0, 1);
          lcd.print("LED 2: vklop    ");
          Serial.println("LED 2: vklop");
          digitalWrite(LED2, HIGH);
          break;
        case koda2_off:
          lcd.setCursor(0, 1);
          lcd.print("LED 2: izklop   ");
          Serial.println("LED 2: izklop");
          digitalWrite(LED2, LOW);
          break;
        case koda3_on:
          lcd.setCursor(0, 1);
          lcd.print("LED 3: vklop    ");
          ledica3 = true;
          break;
        case koda3_off:
          lcd.setCursor(0, 1);
          lcd.print("LED 3: izklop   ");
          ledica3 = false;
          digitalWrite(LED3, LOW);
          break;
        default:
          lcd.setCursor(0, 1);
          lcd.print("Poskusi ponovno ");
          Serial.println("Poskusi ponovno");
          while (Serial.available()) {
            Serial.read();
          }
      }
    }
  }
  if ((millis() - currTime > del) && ledica3) {
      currTime = millis();
      m = !m;
      digitalWrite(LED3, m);
  }
}





/* Napiši program, ki prebere niz znakov iz serijskega porta (4 števke)
Če niz znakov ustreza številki 5461,
se izpiše na serijskem portu izklop in prižge LED dioda.*/

/*
#define LED 8
#define koda 5461

void setup() {
  Serial.begin(115200);
  Serial.println("Vpiši kodo: ");
  pinMode(LED, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    char vpis[5];
    int stevZnakovVpis = Serial.readBytes(vpis, 4);// seznam imena vpis, 4 velik
    //Bere iz serijskega prepomnilnika v seznam tipa char
    if (stevZnakovVpis == 4) {
      vpis[4] = '\0'; // terminator seznama vpis (seznam mora biti zaključen z nulltim terminatorjem)
      int stevilka = atoi(vpis);
      if (stevilka == koda) {
        Serial.println("Dostop je.");
        digitalWrite(LED, HIGH);
      }
      else {
        Serial.println("Poskusi ponovno.");
        while (Serial.available()) {
          Serial.read();
        }
        digitalWrite(LED, LOW);
      }
    }
  }
}
*/