feat(telemetry): Escritura rápida en SD usando sync()

- Hemos cambiado la táctica: ahora el archivo se abre al arrancar y SE QUEDA ABIERTO.
- En lugar de abrir y cerrar el archivo cada vez (que es muy lento), usamos 'sync' para empujar los datos a la tarjeta.
This commit is contained in:
Alejandro Guerrero 2025-12-15 21:28:12 +01:00
parent 8e7c116e6a
commit e991ea3923
Signed by: alejandrogs73
GPG key ID: 1CFF10953BEE333C
2 changed files with 26 additions and 19 deletions

View file

@ -24,14 +24,19 @@ void setup() {
if (!sd.begin(SD_CS_PIN, SPI_CLOCK)) { if (!sd.begin(SD_CS_PIN, SPI_CLOCK)) {
Serial.println("[FALLO] SD no detectada. El sistema continuará sin Datalogging."); Serial.println("[FALLO] SD no detectada. El sistema continuará sin Datalogging.");
} else { } else {
Serial.println("[OK] SD Montada."); if (logFile.open("G26.csv", O_RDWR | O_CREAT | O_APPEND)) {
if (!logFile.exists("G26.csv")) {
if (logFile.open("G26.csv", O_RDWR | O_CREAT | O_AT_END)) { // Si el archivo es nuevo (tamaño 0), escribimos la cabecera
// SOLO Cabeceras de lo que vamos a grabar ahora if (logFile.size() == 0) {
logFile.println("Time,ECT"); logFile.println("Time,ECT");
logFile.close();
}
} }
// 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 // 2. VINCULACIÓN

View file

@ -145,18 +145,20 @@ void DataProcessor::send_serial_frame_4(int dig3, int dig4, int dig5, int dig6,
} }
// ESCRITURA EN SD // ESCRITURA EN SD
void DataProcessor::flushToSD() { void DataProcessor::flushToSD() {
// Solo escribe si la tarjeta está lista // Verificamos que los punteros existan Y que el archivo esté abierto
if (_sd && _logFile && _sd->card()) { if (_sd && _logFile && _logFile->isOpen()) {
// Modo APPEND // 1. Escribimos los datos
if (_logFile->open("G26.csv", O_RDWR | O_CREAT | O_AT_END)) { _logFile->print(millis());
_logFile->print(",");
_logFile->println(car.ect);
_logFile->print(millis()); // 2. SYNC
_logFile->print(","); // Esto fuerza a la SD a guardar físicamente los datos AHORA MISMO,
_logFile->println(car.ect); // pero mantiene el archivo abierto para la siguiente vuelta.
_logFile->sync();
_logFile->close();
}
} }
} }