SD

Ciao a tutti, sono sempre io che rompo :grinning: il mio problema sembra semplice ma non riesco a venirne a capo. Quello che dovrei fare è scrivere una serie di variabili su SD e poi in una seconda accensione di arduino (uno) leggerele per poi essere utilizzate all'interno del programma. E' possibile? :confused:

Certo che è possibile ... dove è che incontri difficoltà ?

Guglielmo

la difficoltà sta nel leggere una sola variabile della serie che è scritta nel file txt nella scheda sd. riesco solo a leggerle tutte.

Mmm ... veramente a me risulta che con il metodo read() della libreria SD, sei TU a dire quanti bytes leggere ... quindi, a te leggere solo quello che ti occorre ... ::slight_smile:

Guglielmo

ma come faccio a sapere che bytes leggere? il mio programma inserisce diversi dati, poi il programma stesso deve trovare il dato che gli serve per utilizzarlo. posso salvare il dato con un nome e poi richiamando il nome come una vera e propria variabile? per esempio poniamo il caso che una variabile x sia scritta nella sd. x = 10. come faccio a leggere il valore della x che è sul file txt? io non so dov'è stato salvato... perchè lo fa i automaticvo il programma.

NO, devi creare una struttura tu.

Ad esempio, tutti record a lughezza fissa (quindi scegli la lunghezza massima che ti serve e scrivi SEMPRE e comunque quel numero di bytes). In questo modo sai che, se, ad esempio, la lunghezza è 10 e ti serve la 5 variabile, dovrai leggere 10 bytes a partire dal byte 40 (primo 0 ..9, secondo 10 ..19, terzo 20 ..29, quarto 30 ..39, quinto 40 ..49, ....)

Guglielmo

Oppure scrivi un semplice file di testo con un valore per riga.

Se l'ordine è fisso, saprai che la tua x è (ad esempio) la 5a riga, per cui sai quale leggere in fase di caricamento.

Se l'ordine è variabile, metti un'etichetta per riga, tipo:

x 4
y 5
z 12

E leggi riga per riga, verifichi se il dato è quello che ti interessa, ecc ecc...

... ed in ogni caso, sia il mio, che quello di SukkoPera, che altri ... la "struttura" del file la devi creare e gestire TU.

Guglielmo

penso sia più facile per me la soluzione di sukkopera, quindi potrei salvare un valore per riga e leggere la riga? nel programma come potrei fare? come potrei scrivere?

Perdonami, ma hai almeno provato a dare un'occhiata agli esempi della libreria SD? C'è sicuramente un esempio di lettura e scrittura da cui puoi partire per realizzare quello che ti serve. Inizia a darci un'occhiata e poi se non capisci torna pure qui.

si sono riuscito ad orinare i dati, cercando su internet ho trovato una cosa del genere per poi leggere il dato:

 void leggi_SD(){
  String ReadLine;
  //leggi il file di testo "test.txt" e caricane il contenuto in "Readline"
  if(myFile = SD.open("test.txt", O_READ)) {
    int c;
    while ((c = myFile.read())>0){
      ReadLine += (char)c;
      if((char)c=='\n') {                
        if(c > 0) ReadLine="";  
      }  
    }  
  }

//converti il contenuto di readline in un numero intero
  int i=(ReadLine[0]-'0');

ma non capisco come leggere un determinato byte salvato nell'sd. cosa dovrei scrivere per esempio se dovessi leggere il 3° byte?

Hai ORINATO dati? Corri da un dottore! :sweat_smile:

Ti avevo suggerito di guardare tra gli ESEMPI della libreria. In particolare ce n'è uno che si chiama ReadWrite che ti fa vedere sia come scrivere che come leggere.

A parte questo, il mio suggerimento è anche quello di lavorare su file DI TESTO, in cui si ragiona "a righe", non a byte. Se usi un formato come quello che ho accennato sopra, quel che devi fare in lettura è qualcosa tipo:

Leggi un carattere dal file. Se non è spazio accodalo in un buffer, altrimenti cambia buffer e prosegui a leggere un carattere alla volta fino al terminatore di linea (\r, \n o entrambi), accodandoli nell'altro buffer. A fine linea nel primo buffer hai una stringa che ti permette di identificare il dato, nel secondo hai il dato vero e proprio.

Se preferisci ragionare a byte forse puoi salvare i tuoi dati nella EEPROM.