Buongiorno.
Qualche volta l'inizializzazione della scheda sd non va a buon fine e lo sketch si ferma.
C'è un modo per reiterare l'operazione ed evitare che si blocchi?
È la scheda sd di una Ethernet Shield.
Grazie ciao.
Ho trovato questo metodo, mi sembra funzionare bene, ho aggiunto un While() nel void setup() che reinizializza la micro sd della scheda ethernet fino a quando non dà più errore, con un delay di 3 secondi per dare un po' di pausa al ciclo. Una variabile (_sd) fa uscire dal While quando = 1.
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#define REQ_BUF_SZ 60
byte mac[] = { 0xAA, 0xAA, 0x00, 0x00, 0xAA, 0xAA };
IPAddress ip(192, 168, 1, 100);
EthernetServer server(80);
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0};
char req_index = 0;
boolean _Sd = 0; //variabile di micro sd pronta o no
void setup()
{
pinMode(50, OUTPUT); // NB 10 nel arduino uno e 50 nel mega
digitalWrite(50, HIGH); // "spegne" la scheda ethernet NB 10 nel arduino uno e 50 nel mega
pinMode(4, OUTPUT); // Pin della SDcard settato come output
digitalWrite(4, 1); // "spegne" la SD card
Serial.begin(9600);
Serial.println("Preparazione micro SD...");
if (!SD.begin(4)) { // Se lamicro SD non risponde...
Serial.println("ERRORE - micro SD non pronta!");
_Sd = 0; // Setta la variabile di micro sd pronta a 0
}
else { // altrimenti...
Serial.println("Micro SD pronta");
_Sd = 1; // Setta la variabile di micro sd pronta a 1
}
while (!_Sd) { // finché _sd diverso da 1...
Serial.println("...Preparazione SD card...");
pinMode(50, OUTPUT); // NB 10 nel arduino uno e 50 nel mega
digitalWrite(50, HIGH); // "spegne" la scheda ethernet NB 10 nel arduino uno e 50 nel mega
pinMode(4, OUTPUT); // Pin della SDcard settato come output
digitalWrite(4, HIGH); // "spegne" la SD card
delay(3000); // pausa 3 secondi
if (!SD.begin(4)) { // Se lamicro SD non risponde...
Serial.println("ERRORE - micro SD non inizializzata!");
_Sd = 0; // Setta la variabile di micro sd pronta a 0
}
else{ // altrimenti...
Serial.println("Micro SD inizializzata correttamente.");
_Sd = 1; // Setta la variabile di micro sd pronta a 1
}
delay(1000); // pausa 1 secondo
}
if (!SD.exists("index.htm")) { // Cerca il file index.html nella micro sd
Serial.println("ERRORE: non trovato il file index.htm!");
return; // "esce" se index file non trovato
}
Serial.println("Trovato il file index.htm");
Ethernet.begin(mac, ip); // inizializza Ethernet
server.begin();
}
Grazie per la condivisione.
Mi pare però strano che l'inizializzazione a volte va e a volte no. Giusto il tuo codice, però (non sono esperto) non vorrei ci fossero dei problemi hardware, magari i contatti non a posto ?