Go Down

Topic: SD (Read 223 times) previous topic - next topic

cgyui

Ciao a tutti, sono sempre io che rompo  :smiley-lol: 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? :smiley-confuse:

gpb01

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

Guglielmo
Search is Your friend ... or I am Your enemy !

cgyui

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

gpb01

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 ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

cgyui

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.

gpb01

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
Search is Your friend ... or I am Your enemy !

SukkoPera

#6
Oct 06, 2016, 06:05 pm Last Edit: Oct 06, 2016, 06:05 pm by SukkoPera
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:
Code: [Select]
x 4
y 5
z 12


E leggi riga per riga, verifichi se il dato è quello che ti interessa, ecc ecc...
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

gpb01

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

Guglielmo
Search is Your friend ... or I am Your enemy !

cgyui

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?

SukkoPera

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.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

cgyui

si sono riuscito ad orinare i dati, cercando su internet ho trovato una cosa del genere per poi leggere il dato:
Code: [Select]
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?

SukkoPera

#11
Oct 08, 2016, 04:31 pm Last Edit: Oct 08, 2016, 04:32 pm by SukkoPera
Hai ORINATO dati? Corri da un dottore! :smiley-sweat:

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.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Go Up