Salve a tutti, sto lavorando ad una serra che si autogestisce ed ho solo un unico piccolo problema, ho preparato tutti i dati da mettere in SD ma vorrei che attraverso l'accensione di due led mi indica la presenza o meno della SD, ho provato controllando la presenza del file
File dataFile = SD.open("serra.txt", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
digitalWrite (40, HIGH);
digitalWrite(41, LOW);
dataFile.print("temperatura");
dataFile.println(dataStringT);
dataFile.print("umidita");
dataFile.println(dataStringH);
dataFile.close();
}
}else if(((now.hour() == 8) && (now.minute() >= 01)) && (now.second() <= 6)){
dataFile.close();
}else {
digitalWrite (41, HIGH);
digitalWrite(40, LOW);
}
delay(50);
Facendo così al primo avvio se ho la card montata il led della card montata si accende ma se durante l'esecuzione del loop tolgo la card il led non cambia viversa se faccio il primo avvio senza card il led che la card non c'è si accende ma poi durante il loop se la tolgo lo stato dei led non cambia.
Magari sarà una cavolata ma non riesco a venire fuori, ringrazio fin da subito chi mi aiuta
qualcosa non torna con le graffe... dopo il primo if chiudi 2 graffe prima dell'else... c'è altro codice prima?
se c'è metti il codice completo, altrimenti correggi le graffe e vedi cosa succede.
Di solito gli zoccolini per le SD e microSD hanno un'apposito contatto che rileva se la scheda e' inserita o meno ... nel tuo non e' connessa ai pin ? ... hai guardato se magari i contatti sono accessibli comunque ?
Ciao a tutti e grazie per le risposte, allora il codice che ho postato fa parte di un codice molto più grande io vi ho messo solo il pezzo però ora ve lo metto un po' più completo
if (SD.exists("serra.txt")){
digitalWrite(41, HIGH);
digitalWrite(40, LOW);
if((((now.hour() == 08) && (now.minute() >= 01)) && (now.second() >= 00)) && (now.second() <= 03)){
String dataStringT = "";
char buffer3[10];
String stringT = dtostrf(t,6,2,buffer3);
dataStringT = stringT;
String dataStringH = "";
char buffer4[10];
String stringH = dtostrf(h,6,2,buffer4);
dataStringH = stringH;
String dataStringTR = "";
char buffer5[10];
String stringTR = dtostrf(HumTerr1,6,2,buffer5);
dataStringTR = stringTR;
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("serra.txt", FILE_WRITE);
dataFile.print("temperatura");
dataFile.println(dataStringT);
dataFile.print("umidita");
dataFile.println(dataStringH);
dataFile.print("umidita terreno ");
dataFile.println(dataStringTR);
dataFile.print(now.day());
dataFile.print("-");
dataFile.print(now.month());
dataFile.print("-");
dataFile.print(now.year());
dataFile.println("*******");
dataFile.close();
//Serial.println(dataStringT);
//Serial.println(dataStringH);
//Serial.println(dataStringTR);
}
if((((now.hour() == 20) && (now.minute() >= 01)) && (now.second() >= 00)) && (now.second() <= 03)){
String dataStringT = "";
char buffer3[10];
String stringT = dtostrf(t,6,2,buffer3);
dataStringT = stringT;
String dataStringH = "";
char buffer4[10];
String stringH = dtostrf(h,6,2,buffer4);
dataStringH = stringH;
String dataStringTR = "";
char buffer5[10];
String stringTR = dtostrf(HumTerr1,6,2,buffer5);
dataStringTR = stringTR;
File dataFile = SD.open("serra.txt", FILE_WRITE);
dataFile.print("temperatura");
dataFile.println(dataStringT);
dataFile.print("umidita");
dataFile.println(dataStringH);
dataFile.print("umidita terreno");
dataFile.println(dataStringTR );
dataFile.print(now.day());
dataFile.print("-");
dataFile.print(now.month());
dataFile.print("-");
dataFile.print(now.year());
dataFile.println("*******");
//Serial.println(dataStringT);
//Serial.println(dataStringH);
//Serial.println(dataStringTR);
dataFile.close();
}
}else{
digitalWrite(40, HIGH);// scrittura SD non eseguita
digitalWrite(41, LOW);// scrittura SD non eseguita
}
delay(50);
questo è il codice completo se avete anche soluzioni migliori per semplificare il codice vi ringrazio.
ho fatto un'altra prova con questa istruzioneif (SD.exists("serra.txt")) ma mi da comunque lo stesso problema