/* program prebere  iz predpomnilnika serijske komunikacije znak (ASCII koda) če prebere znak :
(ASCII 49) '1' izpišemo nazaj na Serijski port: utrip 1x
(ASCII 50) '1' izpišemo nazaj na Serijski port: utrip 2x
'+' izpišemo nazaj na Serijski port: LED on
'-' izpišemo nazaj na Serijski port: LED off
*/

/*#define LED 9

void setup() {
  Serial.begin(115200);
  Serial.println("Vpiši znak: ");
}

void loop() {
  if (Serial.available()) {
    char znak = Serial.read();
    switch (znak) {
      case '1':
        Serial.println("utrip 1x");
        utrip();
        break;
      case '2':
        Serial.println("utrip 2x");
        utrip();
        utrip();
        break;
      case '+':
        Serial.println("LED on");
        digitalWrite(LED, HIGH);
        break;
      case '-':
        Serial.println("LED off");
        digitalWrite(LED, LOW);
        break;
      case '\n':
        //Serial.println("Hvala <3");
        break;
      default:
        Serial.println("Napačen znak");
        break;
    }
  }
}

void utrip() {
  digitalWrite(LED, HIGH);
  delay(200);
  digitalWrite(LED, LOW);
  delay(200);
}*/


/* program prebere iz serijskega predpomnilnika znake (ASCII koda)
Prebrane znake pretvorimo v številčno vrednost in jo izpišemo 
vrednost določi frekvenco utripanja LED diode.*/


/*#define LED 9
int zakasnitev;


void setup() {
  Serial.begin(115200);
  Serial.println("Vnesi zakasnitev diode: ");
}

void loop() {
  static int temp;
  if (Serial.available()) {
    char znak = Serial.read();
    if (znak <= '9' && znak >= '0') {
      zakasnitev = (zakasnitev * 10) + (znak - '0');
    }
    else if (znak == 10) {
      Serial.println(zakasnitev);
      temp = zakasnitev;
      zakasnitev = 0;
    }
  }
  utrip(temp);
}


void utrip(int del) {
  digitalWrite(LED, HIGH);
  delay(del);
  digitalWrite(LED, LOW);
  delay(del);
}*/


/* podobno kot drugi program, vendar z omejitvijo, da lahko naenkrat preberemo samo 5 znakov.
*/

/*#define LED 9
#define MAX 5
int index = 0;
int zakasnitev; // za atol namesto int daš long
char seznam[6];

void setup() {
  Serial.begin(115200);
  Serial.println("Vnesi zakasnitev diode: ");
  pinMode(LED, OUTPUT);
}

//void loop() {
  if (Serial.available()) {
    char znak = Serial.read();
    for (int x = 0; x < 5) {
      if (znak <= '9' && znak >= '0') {
        zakasnitev = (zakasnitev * 10) + (znak - '0');
      }
      else if (znak == '\n') {
        Serial.println()
      }
    }
  }
}
//

void loop() {
  if (Serial.available()) {
    char znak = Serial.read();
    if (znak <= '9' && znak >= '0' && index < MAX) {
      seznam[index] = znak;
      index ++;
    }
    else {
      seznam[index] = 0; // seznam zaključimo z NULL terminatorjem
      zakasnitev = atoi(seznam); // string v integer : atol (long)
      Serial.println(zakasnitev);
      index = 0; // prepišemo znake v seznamu z novimi vnosi
    }
  }
  utrip(zakasnitev);
}

void utrip(int del) {
  digitalWrite(LED, HIGH);
  delay(del);
  digitalWrite(LED, LOW);
  delay(del);
}

 DN: zgornjo nalogo reši z funkcijo millis.
*/

/* program prebere nize znakov v katerem so številke ločene z vejico. 
Pretvorimo jih v celo število in nato zapišemo v seznam. V seznamu imamo
lahko zapisana le 3 števila, npr.: 14,23,454*/

#define seznamStevil 3 // v seznamu imamo lahko 3 števila
int stevilo[seznamStevil]; // seznam številk
int index = 0; // index seznama

void setup() {
  Serial.begin(115200);
  Serial.println("Vnesi tri števila, ločena z vejico: ");
}

void loop() {
  if (Serial.available()) {
    char znak = Serial.read();
    if (znak <= '9' && znak >= '0') {
      stevilo[index] = stevilo[index] * 10 + (znak - '0');
    }
    else if (znak == ',') {
      if (index < seznamStevil - 1) index ++;
    }
    else {
      Serial.println(index);
      if (index >= seznamStevil) {
        for (int i = 0; i < seznamStevil; i++) {
          stevilo[i] = 0;
        }
        index = 0;
      }
      // izpis seznama števil na serijski port
      Serial.println("Seznam števil: ");
      for (int i = 0; i <= index; i++){
        if (i == index) {
          Serial.println(stevilo[i]);
          stevilo[i] = 0;
        }
        else {
          Serial.print(stevilo[i]);
          Serial.print(",");
          stevilo[i] = 0;
        }
      }
      index = 0; // lahko preberemo tri nova števila
    }
  }
}










/* VAJA :::

/*Naloga 4:
Program prebere nize znakov v katerem so zpisane tudi vejice
znake med dvema vejicama pretvorimo v celo število in 
število nato zapišemo v seznam tipa integer. 
V seznamu imamo lahko zapisana samo tri števila npr.: 14,23,454 */

/*#define SEZNAMstevil 3 // v seznamu imamo lahko samo tri števila
int stevilo[SEZNAMstevil]; //sezam številk
int indeks = 0; // indeks seznama
void setup(){
  Serial.begin(9600);
  Serial.println("Vpisi tri stevila, locena z vejico.");
}

void loop(){
  if(Serial.available()){
    char znak = Serial.read();
    if(znak >= '0' && znak <='9'){
      stevilo[indeks] = (stevilo[indeks] *10) + (znak -'0');
    }
    else if (znak == ','){
      if(indeks < SEZNAMstevil -1) indeks++;
    }
    else {
      Serial.println("Seznam številk:");
      if (indeks >= SEZNAMstevil){
        for (int i = 0; i < SEZNAMstevil; i++) stevilo[i] = 0; 
        indeks = 0;
      }
      // izpis seznama števil na serijski port
      for (int i = 0; i <= indeks; i++){
        Serial.print(stevilo[i]);
        Serial.print(",");
        stevilo[i] = 0; // zbrišemo število v seznamu
      }   
      indeks = 0;  // lahko preberemo tri nova števila
    }
  }
}

*/

/*Naloga 3:
Podobno kot naloga 2, vendar z omejitvijo, 
da lahko naenkrat prebere samo 5 znakov. 
Znake preberemo v seznam

#define LED 9
#define MAX 5 // 5 prebranih znakov
int value = 0;
int indeks = 0; //indeks seznama
char seznam[6];
int utrip = 0; // za atol bi uporabili long

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

void loop(){
  if(Serial.available()){
    char znak = Serial.read();
    if(znak >= '0' && znak <='9' && indeks < MAX){
        seznam[indeks] = znak;
        indeks++;
    }
    else{
      seznam[indeks] = 0; // seznam zaključimo z NULL terminatorjem
      utrip = atoi(seznam); // string v integer; atol long
      Serial.println(utrip);
      indeks = 0;// prepišemo znake v seznamu z novim vnosom
    }
  }
  utripanje(utrip);
}
void utripanje(int x){ // DN: reši z uporabo funkcije millis
  digitalWrite(LED, HIGH);
  delay(x);
  digitalWrite(LED, LOW);
  delay(x);
}
*/

/*Naloga 2: 
Program prenere iz serijskega predpomnilnika znake (ASCII koda).
Prebrane znake pretvotrimo v številčno vrednost in jo izpišemo na serijski port.
Vrednost določa frekvenco utripanja LED diode
#define LED 9
int value = 0;

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

void loop(){
  static int m = 0;
  if(Serial.available()){
    char znak = Serial.read();
    if(znak >= '0' && znak <='9'){
      value = (value * 10) + (znak -'0');//'2' - '0'
    }
    else if(znak == 10){
      Serial.println(value);
      m = value;
      value = 0;
    }
  }
  utripanje(m);
}

void utripanje(int x){
  digitalWrite(LED, HIGH);
  delay(x);
  digitalWrite(LED, LOW);
  delay(x);
}
/*

/* Naloga 1: Program prebere iz predpomnilnika serijske komunikacije znak (ASCII koda)
če prebere znak :
 (ASCII 49) '1' izpišemo nazaj na Serijski port: utrip 1x
 (ASCII 50) '2' izpišemo nazaj na Serijski port: utrip 2x
'+' izpišemo nazaj na Serijski port: LED on
'-' izpišemo nazaj na Serijski port: LED off

# define LED 9
void setup() {
  Serial.begin(9600);
  Serial.println("Vpiši znak: ");
  pinMode(LED, OUTPUT);
}
*/
/*
void loop() {
  if(Serial.available()){ //ali je v predpomnilniku mikrokrmilnika kakšen znak
    char znak = Serial.read(); // preberemo en znak iz predpomnilnika
    switch(znak) {
      case '1':
        Serial.println("utrip 1x");
        utrip();
        break;
      case '2':
        Serial.println("utrip 2x");
        utrip();
        utrip();
        break;
      case '+': 
        Serial.println("LED on");
        digitalWrite(LED, HIGH);
        break;
      case '-':
        Serial.println("LED off");
        digitalWrite(LED, LOW);
        break;
      default :
        Serial.println("Vpiši pravi znak.");
        break;
    }
  }
}

void utrip(){
  digitalWrite(LED, HIGH);
  delay(300);
  digitalWrite(LED, LOW);
  delay(300);
}

*/