#ifndef IR_CONTROL_H #define IR_CONTROL_H #include // 红外信号结构体 struct IRSignal { unsigned int* data; // 原始信号数据数组(微秒) int length; // 信号长度 bool isValid; // 信号是否有效 }; // 配置参数 #define IR_RECEIVE_PIN 18 #define IR_SEND_PIN 19 #define MAX_SIGNAL_LENGTH 1000 #define RECEIVE_TIMEOUT_US 1000000 // 1秒接收超时 #define SIGNAL_END_TIMEOUT_US 50000 // 50ms信号结束判断 /** * 初始化红外控制模块 * 设置引脚模式和初始状态 */ void initIRControl(); /** * 检查是否有红外信号开始 * @return bool 是否检测到红外信号开始 * - true: 检测到信号开始(低电平) * - false: 没有检测到信号 */ bool checkIRSignalStart(); /** * 接收红外信号 * @return IRSignal 包含原始红外信号数据的结构体 * - data: 指向信号数据数组的指针 * - length: 信号数据长度 * - isValid: 是否成功接收到有效信号 * * 注意:调用者需要在使用完毕后调用 freeIRSignal() 释放内存 */ IRSignal receiveIRSignal(); /** * 发送红外信号 * @param signal 要发送的红外信号结构体 * @return bool 发送是否成功 * - true: 发送成功 * - false: 发送失败(信号无效或为空) */ bool sendIRSignal(const IRSignal& signal); /** * 释放IRSignal结构体中分配的内存 * @param signal 要释放的信号结构体 */ void freeIRSignal(IRSignal& signal); /** * 复制红外信号 * @param source 源信号 * @return IRSignal 复制的信号 * * 注意:调用者需要在使用完毕后调用 freeIRSignal() 释放内存 */ IRSignal copyIRSignal(const IRSignal& source); /** * 打印红外信号数据(用于调试) * @param signal 要打印的信号 * @param maxPrint 最大打印数量,0表示打印全部 */ void printIRSignal(const IRSignal& signal, int maxPrint = 20); /** * 验证红外信号是否有效 * @param signal 要验证的信号 * @return bool 信号是否有效 */ bool isValidIRSignal(const IRSignal& signal); #endif // IR_CONTROL_H