diff --git a/Display.h b/Display.h index ec36120..a23ca48 100644 --- a/Display.h +++ b/Display.h @@ -129,8 +129,12 @@ uint8_t disp_ext_fb = false; unsigned char fb[512]; uint32_t last_disp_update = 0; int disp_update_interval = 1000/disp_target_fps; + +#define SCREENSAVER_TIME 500 // ms uint32_t last_screensaver = 0; uint32_t screensaver_interval = 600000; +bool screensaver_enabled = false; + uint32_t last_page_flip = 0; uint32_t last_interface_page_flip = 0; int page_interval = 4000; @@ -1113,11 +1117,15 @@ void update_display(bool blank = false) { update_stat_area(); update_disp_area(); display.display(); - if (millis()-last_screensaver >= screensaver_interval) { + // Invert display to protect against OLED screen burn in + if (millis()-last_screensaver >= screensaver_interval+SCREENSAVER_TIME && screensaver_enabled) { + display.invertDisplay(0); + last_screensaver = millis(); + screensaver_enabled = false; + } + else if (millis()-last_screensaver >= screensaver_interval) { display.invertDisplay(1); - delay(500); - display.invertDisplay(0); - last_screensaver = millis(); + screensaver_enabled = true; } #elif DISP_H == 122 && (DISPLAY == EINK_BW || DISPLAY == EINK_3C) display.setFullWindow();