feat: init
This commit is contained in:
90
include/radar_manager.h
Normal file
90
include/radar_manager.h
Normal file
@@ -0,0 +1,90 @@
|
||||
/**
|
||||
* @file radar_manager.h
|
||||
* @brief R60ABD1 毫米波雷达管理模块
|
||||
*/
|
||||
|
||||
#ifndef RADAR_MANAGER_H
|
||||
#define RADAR_MANAGER_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "config.h"
|
||||
#include "radar_protocol.h"
|
||||
|
||||
// 雷达原始数据结构
|
||||
struct RadarRawData {
|
||||
bool presence; // 有人/无人
|
||||
bool motion; // 运动 (false=静止)
|
||||
bool fall; // 跌倒
|
||||
bool resident; // 驻留
|
||||
|
||||
uint8_t heartRate; // 心率
|
||||
uint8_t breathRate; // 呼吸
|
||||
uint8_t body; // 体动/能量值
|
||||
uint16_t distance; // 距离 cm
|
||||
|
||||
bool radarValid; // 雷达有效性
|
||||
bool vitalValid; // 生命体征有效性
|
||||
|
||||
uint32_t lastUpdate;
|
||||
};
|
||||
|
||||
typedef void (*RadarCallback)(const RadarRawData& data);
|
||||
|
||||
class RadarManager {
|
||||
public:
|
||||
RadarManager();
|
||||
~RadarManager();
|
||||
|
||||
bool begin();
|
||||
void loop();
|
||||
|
||||
/** 获取最新数据 */
|
||||
RadarRawData getData() const;
|
||||
|
||||
/** 数据更新回调 */
|
||||
void onDataUpdate(RadarCallback cb);
|
||||
|
||||
/** 发送命令 */
|
||||
void sendCommand(uint8_t control, uint8_t command,
|
||||
const uint8_t* data = nullptr, uint16_t len = 0);
|
||||
void queryInitStatus();
|
||||
void queryDetectRange();
|
||||
|
||||
bool isInitialized() const { return _initialized; }
|
||||
|
||||
/** 检查雷达是否超时未收到数据 (>5秒无有效帧) */
|
||||
bool isTimeout() const {
|
||||
return (_frameCount > 0) && (millis() - _data.lastUpdate > 5000);
|
||||
}
|
||||
/** 雷达数据是否有效 */
|
||||
bool isDataValid() const { return _data.radarValid; }
|
||||
|
||||
private:
|
||||
void _parseByte(uint8_t byte);
|
||||
void _resetParser();
|
||||
bool _validateChecksum();
|
||||
void _processCompleteFrame();
|
||||
|
||||
void _extractPresence(const RadarFrame& frame);
|
||||
void _extractBreathing(const RadarFrame& frame);
|
||||
void _extractHeartRate(const RadarFrame& frame);
|
||||
void _extractSleep(const RadarFrame& frame);
|
||||
void _extractWorkStatus(const RadarFrame& frame);
|
||||
void _extractDetectRange(const RadarFrame& frame);
|
||||
|
||||
uint8_t _calcChecksum(const uint8_t* data, uint16_t len);
|
||||
void _notifyUpdate();
|
||||
|
||||
HardwareSerial* _serial;
|
||||
FrameState _state;
|
||||
RadarFrame _currentFrame;
|
||||
uint16_t _dataIndex;
|
||||
RadarRawData _data;
|
||||
bool _initialized;
|
||||
|
||||
RadarCallback _callback;
|
||||
uint32_t _frameCount;
|
||||
uint32_t _errorCount;
|
||||
};
|
||||
|
||||
#endif // RADAR_MANAGER_H
|
||||
Reference in New Issue
Block a user