83 lines
2.1 KiB
C
83 lines
2.1 KiB
C
#ifndef IR_CONTROL_H
|
||
#define IR_CONTROL_H
|
||
|
||
#include <Arduino.h>
|
||
|
||
// 红外信号结构体
|
||
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
|