2025-05-28 21:33:21 +08:00

51 lines
1.2 KiB
C++

#ifndef IRRE_H
#define IRRE_H
#include <Arduino.h>
#include <SD.h>
#include <IRremote.h>
#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