Files
health-wellness-device-2/include/display_manager.h
yangzhijia 49e3abbb34 feat: init
2026-07-22 11:27:37 +08:00

59 lines
1.6 KiB
C++

/**
* @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