Ciao a tutti, sono sempre io che rompo 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?
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 ... :
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!
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.