Buongiorno a tutti!
Sto lavorando ad un piccolo armadio per la stagionatura che si autogestisce ed ho un unico piccolo problema: quando alimento l'arduino con la SD inserita il programma procede senza alcun intoppo, ma nel momento in cui la estraggo dallo shield (shield MicroSD Card Adapter) il programma si blocca.
Oltre a questo anche se accendo arduino senza che sia presente la SD il programma non funziona.
...
#include <SD.h>
File Logfile;
#define cardSelect 53
Sd2Card card;
bool useSD(void)
{
// See if the card is present and can be initialized:
if (!SD.begin()) {
return false;
}
return true;
}
void closeLog(void)
{
Logfile.close();
delay(50);
digitalWrite(cardSelect, LOW);
}
bool reopenLog(void)
{
useSD();
Logfile = SD.open("datalog.txt", FILE_WRITE);
if (! Logfile) {
printf("couldn't reopen: File");
return false;
}
if (Logfile.seek(Logfile.size()) == false) {
return false;
}
printf("%s reopened File");
return true;
}
void setup() {
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!useSD()) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
}
void.loop(){
if (card.init(SPI_HALF_SPEED, 53)==1&&sd_cl==1)
datalogging();
if (!card.init(SPI_HALF_SPEED, 53))
{
u8g.drawStr( 6, 2 * height + 2, "SD non presente");
u8g.drawStr( 6, 3 * height + 3, "Inserisci?");
if (botton == 1)
{
reopenLog();
sd_cl=1;
}
}
else
{
u8g.drawStr( 6, 2 * height + 2, "SD presente");
u8g.drawStr( 6, 3 * height + 3, "Rimuovi?");
if (botton == 1)
{
closeLog();
sd_cl=0;
}
}
}
}
void datalogging (void)
{
if (dat > 10)
{
dat = 0;
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.print(t_reale);
dataFile.write(9);
dataFile.write(13);
dataFile.close();
Serial.print(" Sd ok ");
Serial.write(9);
}
}
}
...
Ho tralasciato le parti che riguardano la gestione dei sensori, del LCD e dell'encoder rotativo.
Se non c'è l'SD si blocca nel momento dell'inizializzazione.
Vorrei che sia ci sia o meno l'SD il programma prosegua.
Se poi quando viene inserita sia rilevata e parta il datalogging su di essa, mentre quando va estratta si prema un pulsante per la chiusura e poi si possa togliere senza bloccare tutto.
Grazie