feat: init
This commit is contained in:
58
include/display_manager.h
Normal file
58
include/display_manager.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* @file display_manager.h
|
||||
* @brief OLED 显示管理器 - SSD1306 128x64 I2C
|
||||
*
|
||||
* 4 个显示页面:
|
||||
* Page 0 - 环境数据 (温湿度 + WiFi)
|
||||
* Page 1 - 生命体征 (心率 + 呼吸 + 体动)
|
||||
* Page 2 - 人体状态 (有人/运动/跌倒/驻留)
|
||||
* Page 3 - 安全信息 (水浸 + 蜂鸣器 + 运行时间)
|
||||
*/
|
||||
|
||||
#ifndef DISPLAY_MANAGER_H
|
||||
#define DISPLAY_MANAGER_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <U8g2lib.h>
|
||||
#include "config.h"
|
||||
|
||||
class DisplayManager {
|
||||
public:
|
||||
DisplayManager();
|
||||
~DisplayManager();
|
||||
|
||||
/** 初始化 OLED */
|
||||
bool begin();
|
||||
|
||||
/**
|
||||
* @brief 更新显示内容 (每 5 秒调用一次即可)
|
||||
* @param data 遥测数据
|
||||
* @param wifiOk WiFi 是否已连接
|
||||
* @param buzzerOn 蜂鸣器是否在响
|
||||
*/
|
||||
void update(const TelemetryData& data, bool wifiOk, bool buzzerOn);
|
||||
|
||||
/** 切换到下一页 (0→1→2→3→0 循环) */
|
||||
void nextPage();
|
||||
|
||||
/** 获取当前页码 */
|
||||
uint8_t getPage() const { return _pageIndex; }
|
||||
|
||||
private:
|
||||
void _drawPage0(const TelemetryData& data, bool wifiOk, bool buzzerOn);
|
||||
void _drawPage1(const TelemetryData& data);
|
||||
void _drawPage2(const TelemetryData& data);
|
||||
void _drawPage3(const TelemetryData& data, bool buzzerOn, bool wifiOk);
|
||||
|
||||
/** 格式化秒数为 HH:MM:SS */
|
||||
String _fmtUptime(uint32_t secs) const;
|
||||
/** 格式化浮点数为一位小数 */
|
||||
String _fmtFloat(float val) const;
|
||||
|
||||
U8G2_SSD1306_128X64_NONAME_F_HW_I2C _u8g2;
|
||||
uint8_t _pageIndex;
|
||||
uint32_t _lastDrawTime;
|
||||
bool _initialized;
|
||||
};
|
||||
|
||||
#endif // DISPLAY_MANAGER_H
|
||||
Reference in New Issue
Block a user