smart-home/firefly_esp32/main/2410库(Arduino)
2026-02-26 09:16:34 +08:00
..
2410 xiaoyang 2026-02-26 09:16:34 +08:00
HLKModuleConfig.cpp xiaoyang 2026-02-26 09:16:34 +08:00
HLKModuleConfig.h xiaoyang 2026-02-26 09:16:34 +08:00
readme.md xiaoyang 2026-02-26 09:16:34 +08:00

HLK-LD2410配置库使用介绍

初始化

提供两种初始化方式

HLKModuleConfig(HardwareSerial &serial);                              // 直接与模块通信的构造函数
HLKModuleConfig(HardwareSerial &serial, SoftwareSerial &debugSerial); // 增加调试口的构造函数

初始化示例

需要传入单片机连接模块的串口,调试串口可以选

// 带有调试串口的初始化
HLKModuleConfig hlk_config(hardwareSerial, debugSerial);
// 直接连接模块的初始化
HLKModuleConfig hlk_config(hardwareSerial);

雷达状态的初始化

结构体 RadarStatus_2410 是为雷达2410版本设计的其中包含了以下信息:

  • targetStatus: 描述雷达的目标状态,它是一个枚举值,可以为 NoTargetMovingTargetStaticTargetBothTargetsErrorFrame
  • distance: 表示雷达的目标距离,单位为毫米。
  • moveSetDistancestaticSetDistance: 雷达的运动/静止探测距离门数量。
  • detectionDistance: 雷达的最远探测距离门。
  • resolution: 雷达的距离门分辨率。
  • noTargrtduration: 无人持续时间。
  • radarMode_2410: 表示模块的模式,例如基本上报模式或工程上报模式。
  • radarMovePowerradarStaticPower: 结构体,分别包含运动能量值和静止能量值。
  • photosensitive: 光敏值,范围为 0-255。

初始化示例

HLKModuleConfig::RadarStatus_2410 radarStatus;

如何获取雷达感应信息

可以使用getStatus_2410()方法来获取雷达状态,(为了保证获取成功,可以加入重试机制)

示例代码

HLKModuleConfig::RadarStatus_2410 radarStatus;
int retryCount = 0;
const int MAX_RETRIES = 10;  // 最大重试次数,防止无限循环
do {
	radarStatus = hlk_config.getStatus_2410();
    retryCount++;
} while (radarStatus.distance == -1 && retryCount < MAX_RETRIES);//这段代码的目的是从hlk_config对象中重复获取雷达状态直到雷达的距离不再为-1或直到达到最大重试次数MAX_RETRIES。

如何使用获取到的雷达信息

主要用到的就是雷达的状态信息和雷达探测的距离。

示例代码

if (radarStatus.distance != -1) {// 避免打印无效数据
    debugSerial.print("Status: " + String(targetStatusToString(radarStatus.targetStatus)) + "  ----   ");// 打印状态
    debugSerial.println("Distance: " + String(radarStatus.distance) + "  Mode: " + String(radarStatus.radarMode_2410));	//打印距离和是否在工程模式
    debugSerial.print("Move: ");
    if (radarStatus.radarMode_2410 == 1) {// 如果在工程模式下就打印能量值信息
    	for (int i = 0; i < 9; i++) {
        	debugSerial.print(String(radarStatus.radarMovePower.moveGate[i]) + "  ,");
      	}
      	debugSerial.println("");
      	debugSerial.print("Static: ");
      	for (int i = 0; i < 9; i++) {
        	debugSerial.print(String(radarStatus.radarStaticPower.staticGate[i]) + "  ,");
      	}
      	debugSerial.println("");
        // 打印光敏信息
      	debugSerial.println("Photosensitive: " + String(radarStatus.photosensitive));
    }
}

// 用来解析雷达状态
const char* targetStatusToString(HLKModuleConfig::TargetStatus_2410 status) {
  switch (status) {
    case HLKModuleConfig::TargetStatus_2410::NoTarget:
      return "NoTarget";
    case HLKModuleConfig::TargetStatus_2410::MovingTarget:
      return "MovingTarget";
    case HLKModuleConfig::TargetStatus_2410::StaticTarget:
      return "StaticTarget";
    case HLKModuleConfig::TargetStatus_2410::BothTargets:
      return "BothTargets";
    default:
      return "Unknown";
  }
}