diff --git a/G26-Telemetria.ino b/G26-Telemetria.ino index b093b0f..6ce3c0b 100644 --- a/G26-Telemetria.ino +++ b/G26-Telemetria.ino @@ -24,14 +24,19 @@ void setup() { if (!sd.begin(SD_CS_PIN, SPI_CLOCK)) { Serial.println("[FALLO] SD no detectada. El sistema continuará sin Datalogging."); } else { - Serial.println("[OK] SD Montada."); - if (!logFile.exists("G26.csv")) { - if (logFile.open("G26.csv", O_RDWR | O_CREAT | O_AT_END)) { - // SOLO Cabeceras de lo que vamos a grabar ahora - logFile.println("Time,ECT"); - logFile.close(); - } + if (logFile.open("G26.csv", O_RDWR | O_CREAT | O_APPEND)) { + + // Si el archivo es nuevo (tamaño 0), escribimos la cabecera + if (logFile.size() == 0) { + logFile.println("Time,ECT"); } + + // El archivo se queda abierto y listo. + Serial.println("[OK] Archivo abierto"); + + } else { + Serial.println("[ERROR] No se pudo abrir el archivo G26.csv"); + } } // 2. VINCULACIÓN diff --git a/src/data_processor.cpp b/src/data_processor.cpp index 1f91230..1c8d32c 100644 --- a/src/data_processor.cpp +++ b/src/data_processor.cpp @@ -145,18 +145,20 @@ void DataProcessor::send_serial_frame_4(int dig3, int dig4, int dig5, int dig6, } // ESCRITURA EN SD -void DataProcessor::flushToSD() { - // Solo escribe si la tarjeta está lista - if (_sd && _logFile && _sd->card()) { - - // Modo APPEND - if (_logFile->open("G26.csv", O_RDWR | O_CREAT | O_AT_END)) { - - _logFile->print(millis()); - _logFile->print(","); - _logFile->println(car.ect); - _logFile->close(); - } +void DataProcessor::flushToSD() { + // Verificamos que los punteros existan Y que el archivo esté abierto + if (_sd && _logFile && _logFile->isOpen()) { + + // 1. Escribimos los datos + _logFile->print(millis()); + _logFile->print(","); + _logFile->println(car.ect); + + // 2. SYNC + // Esto fuerza a la SD a guardar físicamente los datos AHORA MISMO, + // pero mantiene el archivo abierto para la siguiente vuelta. + _logFile->sync(); + } }