修复红外的兼容性问题

This commit is contained in:
2025-09-22 18:49:14 +08:00
parent 9bea3546c7
commit b3c6b4cde9
3 changed files with 388 additions and 133 deletions

View File

@@ -2,12 +2,17 @@
#define IR_CONTROL_H
#include <Arduino.h>
#include "driver/rmt.h"
#include "driver/gpio.h"
// 红外信号结构体
struct IRSignal {
unsigned int* data; // 原始信号数据数组(微秒)
int length; // 信号长度
bool isValid; // 信号是否有效
unsigned int* markTimes; // mark时间数组(微秒)
unsigned int* spaceTimes; // space时间数组微秒
int markCount; // mark数量
int spaceCount; // space数量
unsigned int carrierFreq; // 载波频率Hz
bool isValid; // 信号是否有效
};
// 配置参数
@@ -16,6 +21,22 @@ struct IRSignal {
#define MAX_SIGNAL_LENGTH 1000
#define RECEIVE_TIMEOUT_US 1000000 // 1秒接收超时
#define SIGNAL_END_TIMEOUT_US 50000 // 50ms信号结束判断
#define IR_CARRIER_FREQ 38000 // 38kHz载波频率
#define CARRIER_PERIOD_US 26 // 38kHz载波周期微秒
// RMT配置参数
#define RMT_TX_CHANNEL RMT_CHANNEL_0 // RMT发送通道
#define RMT_RX_CHANNEL RMT_CHANNEL_1 // RMT接收通道
#define RMT_CLK_DIV 80 // RMT时钟分频器 (80MHz / 80 = 1MHz, 1us分辨率)
#define RMT_MEM_BLOCK_NUM 1 // RMT内存块数量
#define RMT_TX_CARRIER_EN true // 启用发送载波
#define RMT_TX_CARRIER_FREQ_HZ 38000 // 发送载波频率
#define RMT_TX_CARRIER_DUTY_PERCENT 33 // 载波占空比
#define RMT_TX_CARRIER_LEVEL RMT_CARRIER_LEVEL_HIGH // 载波电平
#define RMT_IDLE_LEVEL RMT_IDLE_LEVEL_LOW // 空闲电平
#define RMT_RX_FILTER_EN true // 启用接收滤波器
#define RMT_RX_FILTER_THRESH_US 100 // 接收滤波器阈值(微秒)
#define RMT_RX_IDLE_THRESH_US 10000 // 接收空闲阈值(微秒)
/**
* 初始化红外控制模块
@@ -33,9 +54,12 @@ bool checkIRSignalStart();
/**
* 接收红外信号
* @return IRSignal 包含原始红外信号数据的结构体
* - data: 指向信号数据数组的指针
* - length: 信号数据长度
* @return IRSignal 包含红外信号mark/space时序和载波频率的结构体
* - markTimes: 指向mark时间数组的指针
* - spaceTimes: 指向space时间数组的指针
* - markCount: mark数量
* - spaceCount: space数量
* - carrierFreq: 载波频率
* - isValid: 是否成功接收到有效信号
*
* 注意:调用者需要在使用完毕后调用 freeIRSignal() 释放内存