Ok.
Ho un bel problema con il datalogging, vediamo se potete aiutarmi.
Obiettivo: creare il file di log, nella sottocartella Log che si trova già nel root della SD
Setup:
void setup() {
Serial.begin(115200);
Serial.println("Greenhouse test! v 0.3");
lcd.begin(20, 4); // set up the LCD's number of columns and rows:
Wire.begin();
RTC.begin();
dht_in.begin();
dht_out.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
}
Serial.print("Initializing SD card...");
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
}
fx per la creazione del file
// funzione creazione timestamp file di log
void getFilename(char *filename) {
DateTime now = RTC.now();
int year = now.year();
int month = now.month();
int day = now.day();
filename[0] = 'L';
filename[1] = 'o';
filename[2] = 'g';
filename[3] = '/';
filename[4] = '2';
filename[5] = '0';
filename[6] = year%10 + '0';
filename[7] = year%10 + '0';
filename[8] = month/10 + '0';
filename[9] = month%10 + '0';
filename[10] = day/10 + '0';
filename[11] = day%10 + '0';
filename[12] = '.';
filename[13] = 'c';
filename[14] = 's';
filename[15] = 'v';
return;
}
loop (controlla se il file esiste, se non c'è lo crea, se c'è già va avanti tranquillamente e mostra i dati dei sensori sullo schermo)
void loop () {
// Verifica presenza file di log formattato in TimeStamp:
char filename[] = "Log/00000000.csv";
getFilename(filename);
if (SD.exists(filename)) {
Serial.print(filename);
Serial.println(" esiste.");
}
else {
Serial.println("File di Log non presente.");
lcd.clear ();
lcd.setCursor(0, 0);
lcd.print("FileLog Missing.");
// Se il file di log non esiste viene creato:
Serial.println("Creazione File di Log...");
lcd.setCursor(0, 1);
lcd.print("Building FileLog...");
myFile = SD.open(filename, FILE_WRITE);
// Scrittura dell'Header del file di Log e successiva chiusura:
myFile.println("millis, date, t_out, rh_out, t_in, rh_in, t_h20, t_heat, hz, heat");
myFile.close();
delay(1000);
lcd.clear ();
}
Ora, il problema è questo.
Se nella cartella Log non c'è nulla, il file viene correttamente creato. Ma poi il loop sembra bloccarsi, perché non compaiono i valori dei sensori ecc.
Se il file nella cartella è già presente... non succede assolutamente nulla, lo schermo rimane vuoto e da seriale appaiono solo i messaggi di debug del setup!
"Initializing SD card..."
"initialization done."
La cosa strana è che se riporto il codice alla ver precedente (creazione file in root):
// funzione creazione timestamp file di log
void getFilename(char *filename) {
DateTime now = RTC.now();
int year = now.year();
int month = now.month();
int day = now.day();
filename[0] = '2';
filename[1] = '0';
filename[2] = year%10 + '0';
filename[3] = year%10 + '0';
filename[4] = month/10 + '0';
filename[5] = month%10 + '0';
filename[6] = day/10 + '0';
filename[7] = day%10 + '0';
filename[8] = '.';
filename[9] = 'c';
filename[10] = 's';
filename[11] = 'v';
return;
}
void loop () {
// Verifica presenza file di log formattato in TimeStamp:
char filename[] = "00000000.csv";
getFilename(filename);
if (SD.exists(filename)) {
Serial.print(filename);
Serial.println(" esiste.");
}
else {
Serial.println("File di Log non presente.");
lcd.clear ();
lcd.setCursor(0, 0);
lcd.print("FileLog Missing.");
// Se il file di log non esiste viene creato:
Serial.println("Creazione File di Log...");
lcd.setCursor(0, 1);
lcd.print("Building FileLog...");
myFile = SD.open(filename, FILE_WRITE);
// Scrittura dell'Header del file di Log e successiva chiusura:
myFile.println("millis, date, t_out, rh_out, t_in, rh_in, t_h20, t_heat, hz, heat");
myFile.close();
delay(1000);
lcd.clear ();
}
tutto funziona alla perfezione!
ci deve essere qualcosa che mi sfugge!
Perché lo crea correttamente ma poi (e da li in avanti) sembra impallarsi?