Ciao a tutti ho collegato un sdcard al mio Arduino il quale crea nella sd un file piuttosto grande, ho anche fatto un programmino in vbnet che si connette alla scheda e riesco a comunicare senza problemi ora la mia domanda è: esiste un sistema per copiare/spostare l’intero file dalla sd al pc? Attualmente via seriale/usb con Arduino leggo una riga alla volta del file e lo comunico al pc ma mi sembra un sistema poco professionale.
Occorre capire la dimensione del file, perché se tu stessi usando la shield Ethernet che offre il supporto alla SD potresti inviare il file via http/ftp/socket ma dipende fortemente dalla dimensione del file in quanto Arduino ha poca RAM per gestire dati in memoria e potresti trovarti in un collo di bottiglia derivante dalla dimensione del file stesso.
magari indica anche quele tipo di Arduino stai usando, adattatore SD (etehernet shield, altro???) e possibilità di connessione da/verso Arduino (USB,ethernet,ecc.).
La soluzione migliore che mi viene in mente resta comunque la rimozione della SD da Arduino e la lettura della stessa da PC con apposito adattatore, ma questo dipende se puoi rimuivere la SD da Arduino o se questo sarà in un posto non accessibile
Ciao sto usando un Arduino Leonardo con un micro sd shield a 6pin non ho Ethernet l’intento era quello di mettere tutto in un box chiuso per poter usare la sd non solo per il file da passare al pc ma anche per salvarvi le traduzioni dei testi da visualizzare sul lcd collegato alla scheda e altri dati di configurazione del device finale le dimensioni del file variano da come l’utente poi userà il device potrebbe essere un solo file di pochi byte fino a diventare qualche centinaia di file da 300/400kb.
Onestamente credo che dovrò cambiare la scheda Arduino perché attualmente l’ide mi da il warning che sto utilizzando molta memoria del dispositivo e potrebbero esserci problemi di stabilità ma volevo terminare il progetto e in seguito capire quale scheda è la più indicata
Che c'è di male nel trasferire una riga alla volta? Va benissimo, qualunque trasferimento di dati avviene a blocchi/pacchetti.
Capisco e concordo ma meno comunicazioni faccio meno rischio di perdere dati o ricevere dati errati e poi se utilizzato a pieno devo trasferire 20000 files con 20000 righe di testo per un totale di 40 milioni di stringhe contenenti due integer a stringa
E allora più che ogni riga leggi un tot di byte alla volta, tipo 128-256 (la RAM è quella che è, vedi tu), e trasferisci quelli.
In ogni caso non è che cambi più di tanto, i byte da trasferire sono sempre N, e l'overhead sulla seriale non è funzione del numero di blocchi/pacchetti come invece avviene su una rete TCP/IP.
Se la quantità di dati da trasferire è troppo grande, mi unisco a chi suggeriva di togliere la SD, copiare i file e reinserirla.
Willy_80:
Capisco e concordo ma meno comunicazioni faccio meno rischio di perdere dati o ricevere dati errati e poi se utilizzato a pieno devo trasferire 20000 files con 20000 righe di testo per un totale di 40 milioni di stringhe contenenti due integer a stringa
Con Arduino non puoi pensare di fare trasferimenti pesanti da dati, perché è una piccola MCU mono task, quindi se "perdi tempo" a trasferire così tanti dati, nel frattempo non può fare altro.
20000 files con 20000 righe di testo ciascuna, quindi una riga per volta significa un doppio ciclo da 40 milioni di iterazioni, e se ogni riga contiene due integer (4byte) più CR LF (altri 2 byte) come quantità di dati da trasferire siamo a 20.00020.0006 byte = 240Mbyte. E la seriale arriva al massimo a 115200 bps, ossia 11kbyte al secondo, ci vogliono circa 6 ore e un quarto.
Il tutto considerando anche COME e QUANDO acquisisci e salvi sulla SD tutti questi dati.
Certo, dipende anche con quale frequenza li acquisisci e/o li devi trasferire, magari quei dati sono da intendersi "al giorno" e puoi farlo ad esempio di notte, quando non hai dati da acquisire, allora si potrebbe anche fare.
Ma se non chiarisci bene il contesto è difficile consigliarti.