Files
Dorm-Air-Conditioner-Smart-…/ir_control.h
spdis 9f663aed0b revert b3c6b4cde9
revert 修复红外的兼容性问题
2025-09-23 14:09:49 +08:00

83 lines
2.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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