diff --git a/G26-Telemetria.ino b/G26-Telemetria.ino index ef01df3..28b1e07 100644 --- a/G26-Telemetria.ino +++ b/G26-Telemetria.ino @@ -1,11 +1,10 @@ + #include #include #include "SdFat.h" - #include "include/can.hpp" #include "include/data_processor.hpp" - // --- CONFIGURACIÓN SD (VSPI) --- #define SD_CS_PIN 5 #define SPI_CLOCK SD_SCK_MHZ(20) @@ -25,19 +24,14 @@ void setup() { if (!sd.begin(SD_CS_PIN, SPI_CLOCK)) { Serial.println("[FALLO] SD no detectada. El sistema continuará sin Datalogging."); } else { - 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"); + 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(); + } } - - // 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 @@ -55,4 +49,4 @@ void setup() { void loop() { delay(100); -} +} \ No newline at end of file diff --git a/include/common/common_libraries.hpp b/include/common/common_libraries.hpp index 9c8577a..de54e53 100644 --- a/include/common/common_libraries.hpp +++ b/include/common/common_libraries.hpp @@ -2,13 +2,9 @@ #define COMMON_LIBRARIES_HPP #include - -#include #include "SdFat.h" - +#include "time.h" +#include #include -#include "time.h" -#include - -#endif +#endif \ No newline at end of file diff --git a/include/common/telemetry_status.hpp b/include/common/telemetry_status.hpp index b356a05..74e2971 100644 --- a/include/common/telemetry_status.hpp +++ b/include/common/telemetry_status.hpp @@ -6,4 +6,4 @@ enum class TelemetryStatus { }; -#endif +#endif \ No newline at end of file diff --git a/include/data_processor.hpp b/include/data_processor.hpp index 1fa8135..abbcf77 100644 --- a/include/data_processor.hpp +++ b/include/data_processor.hpp @@ -1,17 +1,14 @@ #ifndef DATAPROCESSOR_HPP #define DATAPROCESSOR_HPP -#include "common/common_libraries.hpp" +#include +#include "SdFat.h" +#include class DataProcessor { public: DataProcessor() = default; - // Estructura de datos - struct CarState { - int ect = 0; // Temperatura (IMPORTANTE POR AHORA). Luego habría que añadir aquí todas las variables que se vallan a guardar. - }; - // Configuración SD void setLogSystem(SdFat* sd_inst, SdFile* file_inst) { _sd = sd_inst; @@ -33,4 +30,4 @@ private: void flushToSD(); // Guardado físico }; -#endif +#endif \ No newline at end of file diff --git a/src/data_processor.cpp b/src/data_processor.cpp index 1c8d32c..83a9191 100644 --- a/src/data_processor.cpp +++ b/src/data_processor.cpp @@ -3,13 +3,9 @@ //RPM + TPS + vBatt + ECT void DataProcessor::send_serial_frame_0(int rpmh, int rpml, int tpsh, int tpsl, int vbatth, int vbattl, int ect){ - - car.ect = ect; // GUARDAR LA VARIABLE DEL FRAME EN LA ESTRUCTURA - - // El resto de variables no son relevantes ahora, se quedan comentadas para ahorrar memoria - // int rpm = (rpmh * 256) + rpml; - // int tps = (tpsh * 256) + tpsl; - // double vbatt = ((vbatth * 256) + vbattl) / 100.0; + int rpm = (rpmh * 256) + rpml; + int tps = (tpsh * 256) + tpsl; + double vbatt = ((vbatth * 256) + vbattl) / 100.0; // 2. Escribimos en la SD flushToSD(); @@ -20,145 +16,142 @@ void DataProcessor::send_serial_frame_0(int rpmh, int rpml, int tpsh, int tpsl, //LAMB + LAMBTRG + FUEL + GEAR void DataProcessor::send_serial_frame_1(int lmbh, int lmbl, int lmbth, int lmbtl, int fuelh, int fuell, int gear){ - - // int lmb = (lmbh * 256) + lmbl; - // int lmbtrg = (lmbth * 256) + lmbtl; - // int fuel = (fuelh * 256) + fuell; + int lmb = (lmbh * 256) + lmbl; + int lmbtrg = (lmbth * 256) + lmbtl; + int fuel = (fuelh * 256) + fuell; } void DataProcessor::send_serial_frame_2(int shut, int fan, int lmbch, int lmbcl, int brakeh, int brakel, int aux1){ - // int lmbcorrect = (lmbch * 256) + lmbcl; - // int brake = (brakeh * 256) + brakel; + int lmbcorrect = (lmbch * 256) + lmbcl; + int brake = (brakeh * 256) + brakel; - // char shut_str[10]; - // char fan_str[10]; - // char aux1_str[10]; + char shut_str[10]; + char fan_str[10]; + char aux1_str[10]; } void DataProcessor::send_serial_frame_3(int aux3, int aux4, int aux5, int aux6, int aux7, int aux8, int dig1){ - // char aux3_str[10]; - // char aux4_str[10]; - // char aux5_str[10]; - // char aux6_str[10]; - // char aux7_str[10]; - // char aux8_str[10]; - // char dig1_str[10]; + char aux3_str[10]; + char aux4_str[10]; + char aux5_str[10]; + char aux6_str[10]; + char aux7_str[10]; + char aux8_str[10]; + char dig1_str[10]; - // if (aux3 == 1){ - // strcpy(aux3_str, "ON"); - // } else { - // strcpy(aux3_str, "OFF"); - // } + if (aux3 == 1){ + strcpy(aux3_str, "ON"); + } else { + strcpy(aux3_str, "OFF"); + } - // if (aux4 == 1){ + if (aux4 == 1){ - // strcpy(aux4_str, "ON"); - // } else { - // strcpy(aux4_str, "OFF"); - // } + strcpy(aux4_str, "ON"); + } else { + strcpy(aux4_str, "OFF"); + } - // if (aux5 == 1){ - // strcpy(aux5_str, "ON"); - // } else { - // strcpy(aux5_str, "OFF"); - // } + if (aux5 == 1){ + strcpy(aux5_str, "ON"); + } else { + strcpy(aux5_str, "OFF"); + } - // if (aux6 == 1){ - // strcpy(aux6_str, "ON"); - // } else { - // strcpy(aux6_str, "OFF"); - // } + if (aux6 == 1){ + strcpy(aux6_str, "ON"); + } else { + strcpy(aux6_str, "OFF"); + } - // if (aux7 == 1){ - // strcpy(aux7_str, "ON"); - // } else { - // strcpy(aux7_str, "OFF"); - // } + if (aux7 == 1){ + strcpy(aux7_str, "ON"); + } else { + strcpy(aux7_str, "OFF"); + } - // if (aux8 == 1){ - // strcpy(aux8_str, "ON"); - // } else { - // strcpy(aux8_str, "OFF"); - // } + if (aux8 == 1){ + strcpy(aux8_str, "ON"); + } else { + strcpy(aux8_str, "OFF"); + } - // if (dig1 == 1){ - // strcpy(dig1_str, "ON"); - // } else { - // strcpy(dig1_str, "OFF"); - // } + if (dig1 == 1){ + strcpy(dig1_str, "ON"); + } else { + strcpy(dig1_str, "OFF"); + } } void DataProcessor::send_serial_frame_4(int dig3, int dig4, int dig5, int dig6, int dig7, int dig8, int dig9){ - // char dig3_str[10]; - // char dig4_str[10]; - // char dig5_str[10]; - // char dig6_str[10]; - // char dig7_str[10]; - // char dig8_str[10]; - // char dig9_str[10]; + char dig3_str[10]; + char dig4_str[10]; + char dig5_str[10]; + char dig6_str[10]; + char dig7_str[10]; + char dig8_str[10]; + char dig9_str[10]; - // if (dig3 == 1){ - // strcpy(dig3_str, "ON"); - // } else { - // strcpy(dig3_str, "OFF"); - // } + if (dig3 == 1){ + strcpy(dig3_str, "ON"); + } else { + strcpy(dig3_str, "OFF"); + } - // if (dig4 == 1){ - // strcpy(dig4_str, "ON"); - // } else { - // strcpy(dig4_str, "OFF"); - // } + if (dig4 == 1){ + strcpy(dig4_str, "ON"); + } else { + strcpy(dig4_str, "OFF"); + } - // if (dig5 == 1){ - // strcpy(dig5_str, "ON"); - // } else { - // strcpy(dig5_str, "OFF"); - // } + if (dig5 == 1){ + strcpy(dig5_str, "ON"); + } else { + strcpy(dig5_str, "OFF"); + } - // if (dig6 == 1){ - // strcpy(dig6_str, "ON"); - // } else { - // strcpy(dig6_str, "OFF"); - // } + if (dig6 == 1){ + strcpy(dig6_str, "ON"); + } else { + strcpy(dig6_str, "OFF"); + } - // if (dig7 == 1){ - // strcpy(dig7_str, "ON"); - // } else { - // strcpy(dig7_str, "OFF"); - // } + if (dig7 == 1){ + strcpy(dig7_str, "ON"); + } else { + strcpy(dig7_str, "OFF"); + } - // if (dig8 == 1){ - // strcpy(dig8_str, "ON"); - // } else { - // strcpy(dig8_str, "OFF"); - // } + if (dig8 == 1){ + strcpy(dig8_str, "ON"); + } else { + strcpy(dig8_str, "OFF"); + } - // if (dig9 == 1){ - // strcpy(dig9_str, "ON"); - // } else { - // strcpy(dig9_str, "OFF"); - // } + if (dig9 == 1){ + strcpy(dig9_str, "ON"); + } else { + strcpy(dig9_str, "OFF"); + } } // ESCRITURA EN SD - 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(); + // 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(ect); + + _logFile->close(); + } } -} +} \ No newline at end of file