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