Leggere più Stringhe da SD

Buongiorno ragazzi,
sto cercando di capire come funziona la lettura di un file da SD.
Quello che vorrei fare è leggere solo alcune stringhe da un file allocato su una SD. Ho cercato nel forum alcune discussione per la lettura dei file e sono riuscito ad arrivare al seguente codice

#include <SPI.h>
#include <SD.h>
File myFile;

char indiciPerFile[] = {'I', 'U', 'P'};
char c;
String inString = "";
boolean startRead = false;

void setup() {
  Serial.begin(9600);

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }

  myFile = SD.open("file.txt");
  if (myFile) {
    while (myFile.available()) {
      for (byte x = 0; x < sizeof(indiciPerFile); x++) {
        while (c != -1) {
          c = myFile.read();
          if (c == indiciPerFile[x]) {
            startRead = true;
          }
          if (!myFile.available()) break;
          if (startRead == true) {
            inString += c;
          }
          if (c == '\n') startRead = false;
        }
        Serial.println(inString); //debug
        inString = "";
      }
    }
    myFile.close();
  }
}

void loop() {

}

il file .txt contiene il seguente contenuto:

Ingressi: 0_0_0_0_0_0
Uscite: 0_0_0_0_0_0
Analogica: 0_0_0
Gradi: 00_00
Puntatore: 0

Io vorrei leggere solo 3 di queste stringhe e per farlo ho usato un ciclo for, ma mi viene restituita solo la prima stringa. Il ciclo for avanza nel conteggio (ho provato a stampare s con la seriale) ma sembra che il puntatore "c" quando arriva alla fine del file non torna a leggere dall'inizio il file .txt
Questo è quello che mi viene stampato

Ingressi: 0_0_0_0_0_0

La cosa strana è che se nel file txt inserisco più stringhe che iniziano con 'I' mi vengono restituite tutte, quindi in teoria il puntatore "c" torna a leggere il file dall'inizio.
le stringhe che a me servono sono contenute in "char indiciPerFile[]".
Qualcuno sa darmi una dritta?

Ciao ragazzi,
ho risolto in questo modo:

#include <SPI.h>
#include <SD.h>
File myFile;

char indiciPerFile[] = {'I', 'U', 'P'};
char c;
String inString = "";
boolean startRead = false;

void setup() {
  Serial.begin(9600);

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }

  for (byte x = 0; x < sizeof(indiciPerFile); x++) {
    myFile = SD.open("file.txt");
    if (myFile) {
      while (myFile.available()) {
        do {
          c = myFile.read();
          if (c == indiciPerFile[x]) {
            startRead = true;
          }
          if (!myFile.available()) break;
          if (startRead == true && c != ';') {
             inString += c;
           }
            else {
              startRead = false;
            }
        } while (c != -1);
        Serial.println(inString); //debug
        inString = "";
      }
    }
    myFile.close();
  }
}

void loop() {

}

Non so se è il modo più veloce in termini di velocità loop, ma fa quello che volevo. Ho modificato il codice, se qualcuno ha voglia di semplificarlo ...... :slight_smile: