#ifndef IRRE_H #define IRRE_H #include #include #include #pragma pack(push, 1) typedef struct { uint32_t protocol; uint32_t bits; struct { uint8_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; uint8_t second; } timestamp; } BinHeader; #pragma pack(pop) class IRController { public: static bool initializeSD(uint8_t csPin = 5); static bool loadConfig(const char* path, BinHeader* header, uint16_t* rawData); static void sendIRSignal(uint16_t* rawData, size_t length, uint8_t irPin = 4); }; bool IRController::initializeSD(uint8_t csPin) { if(!SD.begin(csPin)) return false; return SD.exists("/ir_config.bin"); } bool IRController::loadConfig(const char* path, BinHeader* header, uint16_t* rawData) { File file = SD.open(path); if(!file) return false; file.read((byte*)header, sizeof(BinHeader)); size_t dataSize = (header->bits + 15) / 16 * 2; file.read((byte*)rawData, dataSize); file.close(); return true; } void IRController::sendIRSignal(uint16_t* rawData, size_t length, uint8_t irPin) { IrSender.sendRaw(rawData, length, 38, false); delay(100); } #endif