Estrarre e Reinserire SD

Eccomi ancora.
Sto cercando di salvare orario,temperature e stato delle varie I/O di un mio circuitino su sheda SD che vorrei poter estrarre per caricare i dati su PC e reinserire per continuare a fare datalogger.
Ho letto questo post "[RISOLTO] Rimozione SD e ripristino automatico al reinserimento - #8 by pablos71 - Generale - Arduino Forum" ma sinceramente non ci ho capito un'acca.
Non chiedetemi codice o parti di esso perchè non ne esiste le mie scarse capacità di programmazione mi fanno provare un pezzo per volta per verificare se riesco. E non so neanche se finito tutto la memoria del micro conterra tutto lo sketch con tutti i pasticci che sto facendo sono gia a 25000 byte.( scheda con glcd 128*64 SD RTC e I2C verso altro atmega328).

Ciao… un po vecchio il post, ma mi ricordo ancora quelle prove :slight_smile:

In effetti riguardandolo ci sono 2 if annidati inutili, ne basta uno (erano dei test copia incolla), comunque il principio è:
verificare con “volume.init(&card)” (che restituisce true o false) se la scheda SD è presente o meno, se non lo è Il void sd_init() richiama l’inizializzazione della SD usando la lib <SD.h> l’ho separata dal setup per poter essere richiamata più volte, non è difficile.

ri-ciao

Il concetto e semplice :~ il mio problema è che durante la compilazione non trova le due variabili:
file.close();
root.close();
Ora, basta dichiararle prima del setup ? a cosa servono ?
Se leggo il reference della libreria SD non le vedo. Sono orbo ?

ri bye

probabilmente ti manca questo

Sd2Card card;
SdVolume volume;
SdFile root;

nelle dichiaraz. delle variabili all'inizio ... chi cerca trova http://arduino.cc/en/Tutorial/CardInfo .. qui trovi come trattare quelle var

ciao

Non mi dire che non ho cercato perchè, ti giuro ho cercato, eccome se ho cercato.
Ma nella vastità di internet spesso mi sembra di cercare un ago nell'oceano.
E nella vastità della mia ignoranza spesso non sò neanche cosa cercare.

Graz

però in tutto questo fai attenzione, se estrai la scheda SD mentre in quell'istante il file è open fai un casino danneggiando il file system perdendo quindi tutto il contenuto....(il pc alla lettura troverà errori e ti chiederà di riformattarla) un po' come quando estrai una chiavetta USB dal pc esiste la funzione di "espelli periferica usb" proprio per assicurarsi che il pc non stia scivendo mentre la estrai.
Dovresti prevedere il blocco della scittura e la chiusura file con un pulsantino o qualcosa che ti pare più idoneo, prima di estrarla.

Ciao

Oppure un LED che tieni acceso durante gli accessi alla schedina, un pò come i vecchi floppy disk che avevano la spia luminosa sul frontalino.
Quando hai terminato le operazioni di accesso, fai un flush dei dati e chiudi i file, spengi il led così l'utente sa che eventualmente può rimuovere la schedina.

approvo l’ìidea di leo, con una piccola aggiunta: devi prevedere una zona di memoria in cui salvare i dati nel momento in cui la scheda non è presente.

In oltre questo “buffer” devi usarlo anche se scrivi o leggi spesso dalla SD, in modo da dare tempo all’essere unamo di accorgersi del led spento e di estrarre la carta prima che parta la prossima scrittura/lettura

Calma calma, sto ancora studiando.
Comunque al momento uso la veriabile dell’encoder per dirgli quando puo scrivere sulla sd e quando no.
Mi piace l’idea del led, magari che si accende prima di verificare lo sw della presenza scheda, perche se estraggo la scheda proprio mentre si sta accendendo faccio il patatrac comunque.

certo, la sfiga va prevista, se no si piange dopo :grin:

O.T. ( si dice cosi?) Lo diciamo a qualcuno che l'orario dei post è completamente a capocchia o è saputo?
P.S. Non è completamente a capocchia noto ora è con l'ora di londra.

di solito in questo forum si avvsa quandi si è IN topic :grin:

a me l'orario è ok, controlla il fuso orario del tuo profilo

Il mio cervello è con l'ora di londra.
Grazie

lesto:
controlla il fuso orario del tuo profilo

Quoto. E' lì che va allineato, soprattutto ai cambi di ora legale/solare, che il profilo non aggiorna in automatico.

Nella mia ( e non mi stancherò mai di dirlo ) totale ignoranza in programmazione,
non avendo capito praticamente nulla dal tutorial che mi avete linkato :blush:
non avendo capito niente nelle varie spiegazioni delle librerie e non avendo trovato una pagina che spiega i vari comandi
per gestire le librerie (tutti i comanti, o funzioni?) :
Questo è quello che sono riuscito a mettere in sieme.
Funziona, se il file non esiste lo crea, quando inserisco la scheda incomincia a scrivere, premendo il pulsante smette di scrivere e posso estrarre la scheda senza problemi.
Mi sembrava bello postare la soluzione ai miei problemi; la mia soluzione.

Spero sarete clementi con i commenti.
Ora continuo con le altre parti del progetto.
Grazie a tutti BYE.

sketch_nov28a.ino (1.13 KB)

Bene, solo che nel setup manca l'impostazione del pin select della SD, prima o poi ti darà problemi

pinMode(4, OUTPUT);     
  digitalWrite(4, HIGH);

Se non lo hai capito non c'è nulla di male, ma ti suggerisco di soffermarti a studiarlo e cercare di capirlo, perchè non riuscirai a trovare un problema software limitandoti a copiare e incollare.

ciao

Ma il pin select non è il pin che abilita la periferica a dialogare con il master ?
Nel mio circuito è collegato al pin 16 dell'atmega cioè al digital pin 10 equivalente nell'arduino 1
e difatti dò pinMode(10, OUTPUT); e
digitalWrite(10, HIGH);

sbaglio ?

farstar1965:
non avendo capito niente nelle varie spiegazioni delle librerie e non avendo trovato una pagina che spiega i vari comandi
per gestire le librerie (tutti i comanti, o funzioni?) :

Ma a quali librerie ti riferisci, scusa?
La SD è documentata in toto sul sito:
Reference, sezione Libraries, voce SD. Lì ci sono tutti i metodi della libreria per poter accedere alle funzioni messe a disposizione dalla SD per operare sulle schede di memoria. O non ho capito io la richiesta?

Ripeto, Nella mia ( e non mi stancherò mai di dirlo ) totale ignoranza in programmazione,
Non ho trovato da nessuna parte, per esempio:
Sd2Card card;
SdVolume volume;
SdFile root;
card, volume,root non sono menzionati nel reference ma sono proprio quelle variabili che grazie alla dritta di Pablos mi hanno
permesso di risolvere il mio problema.

Grazie

Quelle sono le definizioni per creare le istanze (copie) degli oggetti (classi) della libreria. Questo perché la libreria fornire un oggetto, sei poi tu ad usarlo per crearne di tuoi, è come il tipo dato “byte”, non puoi usarlo per memorizzare un valore ma devi dire al compilatore di usarlo per definire una variabile tua a cui dai un nome.
Spero di essermi spiegato.

PS:
un consiglio che do sempre, guardati gli esempi allegati all’IDE, se apri “File/Esempi/SD” ci sono degli sketch pronti da studiare per capire come usare la SD.