Caricare testo da SD

Salve a tutti, sono un "inesperto" di Arduino però, grazie a questo forum e le varie guide in rete, ho fatto qualcosina con successo. Dopo un anno mi cimento di nuovo con Arduino (uno) ma siccome sono arruginito devo ricominciare daccapo.
Vengo al dunque.

Ho un file "nomi.txt" sulla SD che contiene:
Pippo
Pluto
Topolino
Paperino
ecc.
Lo scopo è caricare su variabili i nomi contenuti nel file per poterli visualizzare all'occorrenza su un LCD.
Per esempio
nome_1 (contiene il primo nome del file)
nome_2(contiene il secondo nome del file)
nome_3 ... e così via.

Con questo codice di esempio, qui di seguito, trovato in rete riesco a leggere sulla seriale i nomi contenuti nel file,quindi la lettura della SD va bene.

  myFile = SD.open("nomi.txt");

    if (myFile) {
    Serial.println("nomi.txt :");
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
    } else {
    // if the file didn't open, print an error:
    Serial.println("error opening nomi.txt");
    }

Ora il mio problema è: come faccio a passare i nomi in altrettante variabili?
Ripeto non sono affatto esperto in C++, ma datemi un input e sono sicuro riuscirò.
Ringrazio chi anticipatamente

Buongiorno,

essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di farla al più presto. :wink:

Fatto grazie.

ciao

dovresti leggere il flusso dei valori come se fossero inviati dal monitor seriale...quindi carattere per carattere fino a trovare il "fine riga" e/o lo "a capo".
salvare i caratteri letti in un array di char lungo abbastanza da contenere il nome più lungo ed aggiungendo il terminatore si stringa '\0' alla fine del nome.

Grazie.
Quindi per esempio se utilizzassi al massimo 6 nomi con un massimo di 10 lettere, potrebbe essere così l'array:

char nomi [6,10];

Se è giusto adesso devo vedere come passargli i nomi.

deve essere 10 lettere + 1 (terminatore)...quindi 11.

per come popolare le stringhe basta un ciclo for fatto bene...

Scusa perchè devo prevedere lo spazio per il terminatore quando non sarà inserito nella stringa?
Cioè serve solo per valutare quando finisce il nome.

il terminatore serve ad arduino (o altro) per capire dove finisce la stringa; se hai una stringa di 10 posizioni dove avevi scritto "settimo", con terminatore dopo la "o", e poi ci scrivi "ciao" e subito dopo la "o" non ci metti lo '\0' verrà letto anche tutto quello che c'è dopo fino a che il programma non incontra lo '\0' e cioè..."ciaoimo"...se invece nella stringa non c'è alcun '\0' il programma leggerà anche oltre la 10ma posizione...fino a che non trova un '\0' che potrebbe essere anche mai...e qua iniziano i guai.

Purtroppo no
Dovrebbe essere:

char nomi [6][11]={0};

Grazie.
Quindi la stringa che contiene "pluto" sara:

nomi [1];

Giusto?

In C gli indici degli array partono da 0.
Il primo elemento sarà

nomi[0]

se ti riferisci all'elenco che hai postato all'inizio...:
Pippo
Pluto
Topolino
Paperino
ecc.
pluto sarà nella nomi[1]...topolino nella nomi[2] mentre pippo nella nomi[0]

Esatto

Niente non riesco a fare un ciclo unico per
assegnare i nomi presenti nel file.
Vorrei avere una variabile String per ogni nome.
nome1 = Pippo
nome2 = Pluto
ecc..
ecc..
Sono riuscito solo così:

  while (myFile.available()) {
      c = myFile.read();
      nome1 += c;
      //----------------------------------
      while (c != '>') {
        c = myFile.read();
        nome1 += c;
      }
  
      //---------------------------------------
      c = myFile.read(); nome2 += c;
      while (c != '>') {
        c = myFile.read();
        nome2 += c;
      }
    //----------------------------------
// e via così fino a fino a nome6

inoltre ho usato come terminatore ( > ) che tra l'altro viene inserito in coda al nome.

Farlo con 6 variabili diverse diventa complicato. E' molto più semplice con un array da 6 elementi.
Cosa non ti convince della soluzione con l'array?
Poi con una uno è rischioso utilizzare la classe String. Cerca di abituarti ad usare le stringhe classiche del C (array di char).

Io direi che uno sguardo ad

aiutateci ad aiutarvi
La mia seconda volta in c
La pappa è fatta

Sarà utile...

Scritto da telefonino, è solo un indicazione

While file.available(){
Char c= file.read();
If (c=='>'){
J++;
I=0;
}
Else{
Nomi[j][i++]=;
}


Ma queste sono proprio le basi del 'c'...

Volevo dire che guardo guide o esempi ma se non sono aderenti a quello che voglio fare non riesco adadattarli a me. Sono un po di coccio direi.
Comunque questo esempio che mi fai credo di averlo gia provato ma sbagliavo qualcosa.
Quando non mi dava errore il compilatore si bloccava nel ciclo.
Ma appena possibile ci riprovo e se non va vi posto il codice.
Ultima cosa, Nomi la dichiaro come mi è stato detto? Cioè cosìchar nomi [6][11]={0}; oppure String?

Gli oggetti String non fanno parte del mio bagaglio...

Ho capito che non ti stanno simpatici.:smile:
Ma va bene la definizione?