<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Secure Digital Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/secure-digital/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/secure-digital/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Sun, 15 Jan 2017 18:07:50 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Secure Digital Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/secure-digital/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arduino ethernet utilizzare la scheda micro SD</title>
		<link>https://logicaprogrammabile.it/arduino-ethernet-memoria-scheda-micro-sd/</link>
					<comments>https://logicaprogrammabile.it/arduino-ethernet-memoria-scheda-micro-sd/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 26 Sep 2011 21:12:21 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino ethernet]]></category>
		<category><![CDATA[Memoria SD]]></category>
		<category><![CDATA[Micro SD]]></category>
		<category><![CDATA[Secure Digital]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2019</guid>

					<description><![CDATA[<p>Come utilizzare la libreria SD per scrivere e leggere dalla micro SD La nuova board Arduino Ethernet ha in dotazione uno slot per scheda micro SD (Secure Digital) utile per dare la possibilità ai nostri programmi di memorizzare varie informazioni. La libreria permette di lavorare...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-ethernet-memoria-scheda-micro-sd/">Arduino ethernet utilizzare la scheda micro SD</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come utilizzare la libreria SD per scrivere e leggere dalla micro SD</h1>
<p>La nuova board <strong>Arduino Ethernet</strong> ha in dotazione uno slot per <a href="http://it.wikipedia.org/wiki/MicroSD" target="_blank">scheda micro SD</a> (Secure Digital) utile per dare la possibilità ai nostri programmi di memorizzare varie informazioni. La libreria permette di lavorare su schede formattate con file system <strong>FAT16</strong> e <strong>FAT32</strong>, i nomi dei file devono essere composti da massimo 8 caratteri più 3 per l&#8217;estensione (formato 8.3 stile MS-DOS).</p>
<p>Come molte libreria dobbiamo inserire un riferimento nello sketch che la utilizza:</p>
<pre class="lang:arduino decode:true ">//inserisco riferimento alla libreria SD
#include &lt;SD.h&gt;</pre>
<p>&nbsp;</p>
<p>successivamente, nel blocco <strong>setup,</strong> bisogna inizializzare la classe utilizzando il metodo <strong>begin()</strong>. A questo metodo dobbiamo passare il pin relativo alla funzione <strong>Card Select</strong> (CS) che per la<strong> Arduino Ethernet</strong> è uguale a 4, come visibile nello schema elettrico</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-medium wp-image-2029" title="CollegamentoSD" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/CollegamentoSD-300x242.jpg" alt="Schema elettrico collegamento micro sd" width="300" height="242" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/CollegamentoSD-300x242.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/CollegamentoSD.jpg 883w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<pre class="lang:arduino decode:true ">//inizializza la classe e specifica
//il pin Card Select
SD.begin(4);</pre>
<p>&nbsp;</p>
<p><span id="more-2019"></span></p>
<p>Il metodo restituisce <strong>false</strong> se si verificano problemi durante l&#8217;inizializzazione. Quindi prima di continuare è fondamentale verificare chequesta si concluda senza errori</p>
<pre class="lang:arduino decode:true ">if (SD.begin(4) == true)
//inizializzazione ok
//continua con il codice
else
//problemi nell'inizializzazione!</pre>
<p>&nbsp;</p>
<p>Per poter scrivere e leggere file dalla<strong> micro SD</strong> abbiamo bisogno di utilizzare la classe <strong>File</strong> che espone metodi che svolgono questo compito.<br />
Creiamo un oggetto dalla classe <strong>File</strong> subito dopo la dichiarazione della libreria <strong>SD</strong>:</p>
<pre class="lang:arduino decode:true ">//inserisco riferimento alla libreria SD
#include &lt;SD.h&gt;

//creo un oggetto dalla classe File
File MioFile;</pre>
<p>&nbsp;</p>
<p>Utilizziamo il metodo <strong>open()</strong> della classe SD per aprire un file esistente; il metodo restituisce un riferimento che viene associato all&#8217;oggetto <strong>MioFile</strong>:</p>
<pre class="lang:arduino decode:true ">//dopo l'inizializzazione posso lavorare sulla micro SD
//Apro un file di testo
MioFile = SD.open("filetest.txt", FILE_WRITE);</pre>
<p>&nbsp;</p>
<p>Da notare che se il file non esiste nella micro SD il metodo <strong>open()</strong> ne crea uno automaticamente.</p>
<p>il metodo <strong>open()</strong> della classe file accetta come argomenti due parametri, il primo è il nome del file, il secondo è un flag che indica se aprire il file in lettura o in scrittura, le opzioni sono:</p>
<table width="394">
<tbody>
<tr>
<td><strong>FILE_READ</strong></td>
<td>Apre il file per la lettura partendo dall&#8217;inizio</td>
</tr>
<tr>
<td><strong>FILE_WRITE</strong></td>
<td>Apre il file per la scrittura</td>
</tr>
</tbody>
</table>
<p>Se non si verificano errori il metodo <strong>open()</strong> restituisce il riferimento al file, in caso di errore invece restituisce false; è buona norma controllare tramite un blocco <strong>if</strong> se si sono verificati errori:</p>
<pre class="lang:arduino decode:true ">//dopo l'inizializzazione posso lavorare sulla micro SD
//Creao un file di testo
MioFile = SD.open("filetest.txt", FILE_WRITE);

if (MioFile == false)
//problemi nell'accesso al file</pre>
<p>&nbsp;</p>
<p>Utilizziamo il metodo <strong>println()</strong> dell&#8217;oggetto <strong>MioFile</strong> per scrivere dati sul file appena aperto</p>
<pre class="lang:arduino decode:true ">//se non ci sono problemi nell'apertura dei file scrivi
//qualcosa al suo interno
if (MioFile != false)
MioFile.println("Ciao Mondo");</pre>
<p>&nbsp;</p>
<p>Una volta ultimate le fasi di scrittura, se non intendiamo scrivere altro è consigliabile rilasciare le risorse chiudendo il file con il metodo <strong>close()</strong></p>
<pre class="lang:arduino decode:true ">//chiudo il file
MioFile.close()</pre>
<p>&nbsp;</p>
<p>La fase di lettura è analoga a quella di scrittura, si procede aprendo il file con il metodo <strong>open()</strong> ed eseguendo il metodo <strong>read()</strong> dell&#8217;oggetto <strong>MioFile</strong></p>
<pre class="lang:arduino decode:true ">//Apro il file per la lettuta
MioFile = SD.open("filetest.txt", FILE_READ);

//Se non si sono verificati errori
//leggo il file
if (MioFile == true)
{

//Leggi fino alla fine del file
while (MioFile.available())
{
//read esegue la lettura di un byte alla volta
Serial.write(MioFile.read());
}

// close the file:
MioFile.close();
}</pre>
<p>&nbsp;</p>
<p>Il metodo <strong>available()</strong> restituisce il numero di byte disponibili  tra il puntatore e la fine del file. Il puntatore rappresenta un indice, o per rendere meglio l&#8217;idea, un cursore all&#8217;interno del file aperto.<br />
Quando apriamo il file il puntatore viene posizionato sul primo byte quindi il metodo <strong>available()</strong> restituisce il numero di byte compresi tra il puntatore e la fine del file stesso. La <strong>read()</strong> legge il primo byte (dato che il puntatore si trova all&#8217;inizio del file) e fa avanzare il cursore di una posizione.<br />
L&#8217;illustrazione seguente spiega meglio il concetto, (viene preso in considerazione un file di 100 byte)</p>
<p>Quando il file viene aperto il cursore punta sul primo byte e <strong>available()</strong> restituisce 100</p>
<p><img decoding="async" class="aligncenter size-full wp-image-2034" title="Puntatore01" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/Puntatore01.gif" alt="Puntatore a file" width="266" height="296" /></p>
<p>Dopo la <strong>read()</strong> il cursore avanza di un byte spostandosi al secondo byte del file. Il metodo <strong>available()</strong> restituisce 99</p>
<p><img decoding="async" class="aligncenter size-full wp-image-2035" title="Puntatore02" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/Puntatore02.gif" alt="Puntatore a file micro sd" width="266" height="296" />Ogni volta che eseguiamo la <strong>read()</strong> il puntatore scorre fino ad arrivare alla fine del file (<strong>EOF</strong>) in questa posizione <strong>available()</strong> restituisce 0.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2036" title="Puntatore03" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/Puntatore03.gif" alt="EOF end of file" width="266" height="296" /></p>
<p>Il ciclo <strong>while()</strong> esegue la <strong>read()</strong> ciclicamente fino a quando il valore di <strong>available()</strong> restituisce zero.</p>
<p>Una volta eseguita la lettura, se non intendiamo fare altro con il file, è consigliabile eseguire il metodo <strong>close()</strong> per rilasciare risorse e chiudere il file correttamente.</p>
<pre class="lang:arduino decode:true ">//chiudo il file
MioFile.close()</pre>
<p>&nbsp;</p>
<h4>Verificare l&#8217;esistenza di un file o di una directory</h4>
<p>La classe SD espone alcuni metodi utili per gestire la nostra micro SD, uno di questi permette di verificare l&#8217;esistenza di un file all&#8217;interno di un percorso, il metodo è <strong>exists()</strong> e viene utilizzato in questo modo</p>
<pre class="lang:arduino decode:true ">//verifico l'esistenza di un file
if (SD.exists("filetest.txt"))
//true -&gt; il file esiste
else
//false-&gt; il file non esiste</pre>
<p>&nbsp;</p>
<p>possiamo includere anche un percorso di cartelle</p>
<pre class="lang:arduino decode:true ">//verifico l'esistenza di un file in un percorso
if (SD.exists("arduino/arduino0022/filetest.txt"))
//true -&gt; il file esiste
else
//false-&gt; il file non esiste</pre>
<p>&nbsp;</p>
<p>con lo stesso metodo verifichiamo l&#8217;esistenza di una directory</p>
<pre class="lang:arduino decode:true ">//verifico l'esistenza di un file in un percorso
if (SD.exists("arduino/arduino0022"))
//true -&gt; la directory arduino0022 esiste
else
//false-&gt; la directory arduino0022 NON esiste</pre>
<p>&nbsp;</p>
<h4>Come cancellare un file dalla micro SD</h4>
<p>Dopo aver eseguito diverse prove creando diversi file sulla micro SD possiamo liberare un po di spazio cancellandone qualcuno. Il metodo <strong>remove()</strong> della classe <strong>SD</strong> esegue questo compito, il suo utilizzo è molto semplice e l&#8217;unico parametro da passargli è il nome del file da cancellare:</p>
<pre class="lang:arduino decode:true ">//Cancella il file di test
SD.remove("filetest.txt");</pre>
<p>&nbsp;</p>
<p>Se la cancellazione avviene con successo la funzione restituisce <strong>true</strong> altrimenti <strong>false</strong>.</p>
<pre class="lang:arduino decode:true ">//Cancella il file di test
if (SD.remove("filetest.txt"))
Serial.println("File eliminato!");
else
Serial.println("Problemi nell'eliminazione");</pre>
<p>&nbsp;</p>
<h3>Creare ed eliminare directory</h3>
<p>Anche per la creazione ed eliminazione di directory è sufficiente utilizzare i metodi della classe SD, per la creazione utilizziamo il metodo <strong>mkdir</strong> mentre per l&#8217;eliminazione utilizziamo il metodo <strong>rmdir</strong></p>
<pre class="lang:arduino decode:true ">//Creo una directory
if(SD.mkdir("arduino"))
Serial.println("Directory creata");
else
Serial.println("Problemi nella creazione della directory");</pre>
<p>&nbsp;</p>
<p>con <strong>mkdir</strong> è possibile creare anche le sottodirectory in un colpo solo</p>
<pre class="lang:arduino decode:true ">//Creo directory e sottodirectory
if(SD.mkdir("arduino/arduino1/arduino2"))
Serial.println("Directory create");
else
Serial.println("Problemi nella creazione della directory");</pre>
<p>&nbsp;</p>
<p>il codice precedente crea tre cartelle nidificate (arduino, arduino1 e arduino2) utilizzando solamente una singola istruzione.<br />
Per eliminare le directory utilizziamo il metodo <strong>rmdir()</strong> in questo modo</p>
<pre class="lang:arduino decode:true ">//Elimina la directory
if(SD.rmdir("arduino"))
Serial.println("Directory Eliminata");
else
Serial.println("Problemi nell'eliminazione della directory");</pre>
<p>&nbsp;</p>
<p><strong>rmdir()</strong> non può eliminare una directory se all&#8217;interno sono presenti altre sottodirectory oppure file, bisogna quindi svuotale e poi eliminarle singolarmente</p>
<pre class="lang:arduino decode:true ">//Elimina le directory vuote
SD.rmdir("arduino2");
SD.rmdir("arduino1");
SD.rmdir("arduino");</pre>
<p>&nbsp;</p>
<p>La gestione della micro SD risulta essere molto semplice e comoda per le diverse applicazioni che hanno bisogno di memorizzare dati piuttosto che recuperarne per eseguire calcoli o comparazioni. Nel prossimo articolo vedremo come utilizzare queste funzioni per creare un data logger.</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-ethernet-memoria-scheda-micro-sd/">Arduino ethernet utilizzare la scheda micro SD</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-ethernet-memoria-scheda-micro-sd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
