zhengchen_lcd_display.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #ifndef ZHENGCHEN_LCD_DISPLAY_H
  2. #define ZHENGCHEN_LCD_DISPLAY_H
  3. #include "display/lcd_display.h"
  4. #include <esp_lvgl_port.h>
  5. class ZHENGCHEN_LcdDisplay : public SpiLcdDisplay {
  6. protected:
  7. lv_obj_t* high_temp_popup_ = nullptr; // 高温警告弹窗
  8. lv_obj_t* high_temp_label_ = nullptr; // 高温警告标签
  9. public:
  10. // 继承构造函数
  11. using SpiLcdDisplay::SpiLcdDisplay;
  12. void SetupHighTempWarningPopup() {
  13. // 创建高温警告弹窗
  14. high_temp_popup_ = lv_obj_create(lv_scr_act()); // 使用当前屏幕
  15. lv_obj_set_scrollbar_mode(high_temp_popup_, LV_SCROLLBAR_MODE_OFF);
  16. lv_obj_set_size(high_temp_popup_, LV_HOR_RES * 0.9, fonts_.text_font->line_height * 2);
  17. lv_obj_align(high_temp_popup_, LV_ALIGN_BOTTOM_MID, 0, 0);
  18. lv_obj_set_style_bg_color(high_temp_popup_, lv_palette_main(LV_PALETTE_RED), 0);
  19. lv_obj_set_style_radius(high_temp_popup_, 10, 0);
  20. // 创建警告标签
  21. high_temp_label_ = lv_label_create(high_temp_popup_);
  22. lv_label_set_text(high_temp_label_, "警告:温度过高");
  23. lv_obj_set_style_text_color(high_temp_label_, lv_color_white(), 0);
  24. lv_obj_center(high_temp_label_);
  25. // 默认隐藏
  26. lv_obj_add_flag(high_temp_popup_, LV_OBJ_FLAG_HIDDEN);
  27. }
  28. void UpdateHighTempWarning(float chip_temp, float threshold = 75.0f) {
  29. if (high_temp_popup_ == nullptr) {
  30. ESP_LOGW("ZHENGCHEN_LcdDisplay", "High temp popup not initialized!");
  31. return;
  32. }
  33. if (chip_temp >= threshold) {
  34. ShowHighTempWarning();
  35. } else {
  36. HideHighTempWarning();
  37. }
  38. }
  39. void ShowHighTempWarning() {
  40. if (high_temp_popup_ && lv_obj_has_flag(high_temp_popup_, LV_OBJ_FLAG_HIDDEN)) {
  41. lv_obj_clear_flag(high_temp_popup_, LV_OBJ_FLAG_HIDDEN);
  42. }
  43. }
  44. void HideHighTempWarning() {
  45. if (high_temp_popup_ && !lv_obj_has_flag(high_temp_popup_, LV_OBJ_FLAG_HIDDEN)) {
  46. lv_obj_add_flag(high_temp_popup_, LV_OBJ_FLAG_HIDDEN);
  47. }
  48. }
  49. };
  50. #endif // ZHENGCHEN_LCD_DISPLAY_H