//naloga 6
// Program lahko iz serijskega porta prebere do 50 znakov
// in jih zapise v seznam tipa char
// vsebino seznama zapisemo na serijski port
//sesteva stevilo vejic
/*
#define MAKSsteviloZnakov 50
char seznam[MAKSsteviloZnakov];
bool novPodatek = false; // preberemo vse podatke iz porta

void setup() {
  Serial.begin(9600);
  Serial.println("Vpisi niz znakov");

}

void loop() {
  int stevec = 0;
  if(Serial.available()){
    Serial.readBytesUntil('\n', seznam, MAKSsteviloZnakov); // preberemo vse znake
    novPodatek = true;
  }
  if(novPodatek){
    Serial.print("Vpisani znaki so: ");
    Serial.println(seznam);
    novPodatek = false;
    for (int i=0; i < MAKSsteviloZnakov; i++) {
      if (seznam[i] == ',') stevec ++;
    }

    for (int i=0; i < MAKSsteviloZnakov; i++) seznam[i] = 0;  // seznam se izbriše
    Serial.println(stevec);
  }

}*/

/*
//naloga 7
// s pomocjo funkcije strtok() razdeli seznam na posamezne podsezname 
// locilni znak je vejica
char imena[] = "Janko! Meta,00, Nika";
char deli[] = ",.!? ";

void setup() {
  Serial.begin(9600);
  Serial.println("Razdeli seznam na posamezna imena.");

  char *token = strtok(imena, deli);
  while (token != NULL) {
    Serial.println(token);
    token = strtok(NULL, deli);
  }
}

void loop() {
}
*/


// preberi stanje serijskega predpomnilnika s funkcijo Serial.readBytesUntil()
// in jo zapisi v seznam buffer tipa char
// s pomocjo funkcije strtok() razdeli niz znakov seznama buffer na podnize
// locilni string naj bo ","
// s pomocjo funkcije atol() pretvori niz znakov v celo stevilo
// stevilke zapisi v seznam stevila[]
// doloci najmanjsi in najvecjo stevilko seznam stevila[]
// za brisanje seznamov uporabi funkcijo memset()


/*
#define MAKS_STEVILK 50
#define BUFFER_SIZE 50
char buffer[BUFFER_SIZE];
int indeks = 0; // indeks trenutno shranjenih stevilk seznama seznamStevilk[]
long seznamStevilk[MAKS_STEVILK];

void setup(){
  Serial.begin(9600);
  Serial.println("Vpiši stevilo");
}

void loop(){
  if(Serial.available()){
    memset(buffer, 0, sizeof(buffer)); //pobrisemo vsebino predpomnilnika
    Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
    char *token = strtok(buffer, ",");
    while(token != NULL){
      seznamStevilk[indeks] = atol(token);
      token = strtok(NULL, ",");
      indeks++;

    }
    Serial.println("Seznam shranjenih številk: ");
    for(int i = 0; i < indeks; i++){
      Serial.print(seznamStevilk[i]);
      Serial.print(",");
    }
    //brisanje seznama stevilk
    memset(seznamStevilk, 0, MAKS_STEVILK);
    indeks = 0; // ponastavimo indeks seznama na nič
  }

}*/

// naloga 8
// program prebere zanke (števke) iz serijskega porta. Uporabi serial.readBytesUntil()
// Med znaki se nahajajo tudi vejice. 
// seznam razdeli na posamezne besede (številke) kot dolocajo vejice. uporabi strtok
// stevilke na koncu pretvori v integer

#define BUFFER_SIZE 50 // št. znakov začasnega seznama za branje znakov
#define MAKS_STEVILK 5  // največ 5 številk
void setup(){
  Serial.begin(9600);
  Serial.println("Vpisi niz znakov:");
}

int indeks = 0;
int seznamStevilk[MAKS_STEVILK];

void loop() {
  if (Serial.available()) {
    char buffer[BUFFER_SIZE];
    memset(buffer,0,sizeof(buffer));   // namesto zanke for buffer[i] = 0
    Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
    Serial.println(buffer);
    //seznam razdelimo na številke, ločeno z vejico
    char *token = strtok(buffer, ',');
    while (token != NULL && indeks < MAKS_STEVILK) {
      seznamStevilk[indeks++] = atoi(token);
      token = strtok(NULL, ',');
    }
  // izpis vsebine seznama seznamStevilk
  Serial.println("Seznam stevilk");
  for (int i = 0; i < indeks; i++) Serial.println(seznamStevilk[i]);
  // brisanje seznam številk
  memset(seznamStevilk,0,sizeof(seznamStevilk)); 
  }
}
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
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL