#define DATAGRAM_HDR 0xAA // Comandos del cronómetro enum ChronoCommands : uint8_t { Null = 0x00, // Comando nulo ForceStart = 0x01, // Forzar inicio ForceStop = 0x02, // Forzar detención ForceReset = 0x04 // Forcer reinicio del cronómetro }; // Modos de operación del dispositivo enum DeviceModes : uint8_t { CHRONO = 0x00 // Modo Cronómetro }; // Estructura para un comando de la API sin datos struct ChronoAPICommand { uint8_t type; // Cabecera de Comando ChronoCommands command; // Comando solicitado }; // Unión genérica para serializar y des-serializar tipos template union buffer { T data; uint8_t buffer[sizeof(T)]; }; bool sendLock = false; // Función para enviar un buffer por I2C template void SendBuffer(buffer buffer) { while (sendLock) delay(1); sendLock = true; Wire.flush(); Wire.write(buffer.buffer, sizeof(T)); sendLock = false; }