重构了红外接收
This commit is contained in:
38
ir_control.h
38
ir_control.h
@@ -2,12 +2,19 @@
|
||||
#define IR_CONTROL_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "driver/rmt.h"
|
||||
#include "driver/gpio.h"
|
||||
#include <IRrecv.h>
|
||||
#include <IRutils.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 +23,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 +56,12 @@ bool checkIRSignalStart();
|
||||
|
||||
/**
|
||||
* 接收红外信号
|
||||
* @return IRSignal 包含原始红外信号数据的结构体
|
||||
* - data: 指向信号数据数组的指针
|
||||
* - length: 信号数据长度
|
||||
* @return IRSignal 包含红外信号mark/space时序和载波频率的结构体
|
||||
* - markTimes: 指向mark时间数组的指针
|
||||
* - spaceTimes: 指向space时间数组的指针
|
||||
* - markCount: mark数量
|
||||
* - spaceCount: space数量
|
||||
* - carrierFreq: 载波频率
|
||||
* - isValid: 是否成功接收到有效信号
|
||||
*
|
||||
* 注意:调用者需要在使用完毕后调用 freeIRSignal() 释放内存
|
||||
|
||||
Reference in New Issue
Block a user