Skip to content

Commit 4c29270

Browse files
committed
Fixed flicker on progress bar update
1 parent aa0a7d8 commit 4c29270

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/lcd_tft.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,16 @@
4343
#define WHITE_AREA_WIDTH (DISPLAY_AREA_WIDTH - (2 * 8))
4444
#define WHITE_AREA_HEIGHT (DISPLAY_AREA_HEIGHT - (WHITE_AREA_Y + 20))
4545

46-
4746
#define INFO_BOX_BOARDER 8
4847
#define INFO_BOX_X ((WHITE_AREA_X + WHITE_AREA_WIDTH) - (INFO_BOX_WIDTH + INFO_BOX_BOARDER))
4948
#define INFO_BOX_WIDTH 190
5049
#define INFO_BOX_HEIGHT 56
5150

51+
#define BOOT_PROGRESS_WIDTH 300
52+
#define BOOT_PROGRESS_HEIGHT 16
53+
#define BOOT_PROGRESS_X ((TFT_SCREEN_WIDTH - BOOT_PROGRESS_WIDTH) / 2)
54+
#define BOOT_PROGRESS_Y 235
55+
5256
#include "web_server.h"
5357

5458
PNG png;
@@ -124,6 +128,9 @@ unsigned long LcdTask::loop(MicroTasks::WakeReason reason)
124128
DBUGF("Back buffer %p", _back_buffer_pixels);
125129
#endif
126130

131+
pinMode(LCD_BACKLIGHT_PIN, OUTPUT);
132+
digitalWrite(LCD_BACKLIGHT_PIN, HIGH);
133+
127134
_initialise = false;
128135
}
129136

@@ -145,14 +152,19 @@ unsigned long LcdTask::loop(MicroTasks::WakeReason reason)
145152
_full_update = false;
146153
}
147154

148-
_screen.fillRoundRect(90, 235, 300, 16, 8, TFT_WHITE);
155+
TFT_eSprite sprite(&_screen);
156+
uint16_t *pixels = (uint16_t *)sprite.createSprite(BOOT_PROGRESS_WIDTH, BOOT_PROGRESS_HEIGHT);
157+
sprite.fillScreen(TFT_OPENEVSE_BACK);
158+
sprite.fillRoundRect(0, 0, BOOT_PROGRESS_WIDTH, BOOT_PROGRESS_HEIGHT, 8, TFT_WHITE);
149159
if(_boot_progress > 0) {
150-
_screen.fillRoundRect(90, 235, _boot_progress, 16, 8, TFT_OPENEVSE_GREEN);
160+
sprite.fillRoundRect(0, 0, _boot_progress, BOOT_PROGRESS_HEIGHT, 8, TFT_OPENEVSE_GREEN);
151161
}
162+
_screen.startWrite();
163+
_screen.pushImage(BOOT_PROGRESS_X, BOOT_PROGRESS_Y, BOOT_PROGRESS_WIDTH, BOOT_PROGRESS_HEIGHT, pixels);
164+
_screen.endWrite();
165+
sprite.deleteSprite();
152166
_boot_progress += 10;
153167

154-
pinMode(LCD_BACKLIGHT_PIN, OUTPUT);
155-
digitalWrite(LCD_BACKLIGHT_PIN, HIGH);
156168
nextUpdate = 166;
157169
if(_boot_progress >= 300) {
158170
_state = State::Charge;

0 commit comments

Comments
 (0)