LVGL 9.3.0 - LV_IMG_SET_SRC требует LV_REFR_NOW?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 LVGL 9.3.0 - LV_IMG_SET_SRC требует LV_REFR_NOW?

Сообщение Anonymous »

lvgl 9.3.0 - LV_IMG_SET_SRC требует LV_REFR_NOW? Zip, но на основе LVGL 8.x (DEV).

мне удалось получить дисплей, работающий с LVGL 9.3.0, и слайд -шоу в основном работает (!), Включая двойную буферизацию. Все объекты LVGL выделяются в PSRAM.
При переключении изображений, однако, дисплей мерцает - поэтому я начал Googling и чат: почему он мерцает? Насколько я понимаю, я должен , который нуждается в том, что - lv_timer_handler (); должен обрабатывать это.

, но если я удалю lv_refr_now , изображения вообще не показаны. Редроу, но это тоже не работает.
Примечание: объект img создается только один раз в классе с использованием img = lv_image_create (lv_scr_act ()); , а затем повторно использовал в петле Slideshow с LV_IMG_SERC (iMg_SRC (iMg_SRC (img_src (iMg_src (img_src (img_s, и затем повторный PersistentPath); < /code>. < /p>
Что я делаю неправильно? < /p>

platformio.ini
lib_deps =
moononournation/GFX Library for Arduino@1.6.0
lvgl/lvgl@^9.3.0
< /code>
Slideshow.h
#pragma once

#include
#include
#include
#include "SDCardManager.h"

class Slideshow {
public:
Slideshow(SDCardManager *sdCardManager, const char* folderPath, uint32_t delayMs);
void begin();
void update();

private:
void showImage(const char* path);

SDCardManager *sdCardManager;
std::string folder;
std::vector files;
size_t currentIndex;
uint32_t lastSwitch;
uint32_t delay;
lv_obj_t* img;
};

< /code>
Slideshow.cpp
#include "Slideshow.h"
#include "SDCardManager.h"
#include
#include

Slideshow::Slideshow(SDCardManager *sdCardManager1, const char *folderPath,
uint32_t delayMs)
: sdCardManager(sdCardManager1), folder(folderPath), delay(delayMs) {}

void Slideshow::begin() {
img = lv_image_create(lv_scr_act());
lv_obj_center(img);

files = sdCardManager->listFilesRecursive(folder.c_str(), ".jpg");
currentIndex = static_cast(-1); // Noch kein Bild aktiv
lastSwitch = millis();
}

void Slideshow::update() {
if (millis() - lastSwitch >= delay && !files.empty()) {
currentIndex = (currentIndex + 1) % files.size();

String fn = "A:/" + String(files[currentIndex].c_str());
Serial.printf("Switching to image (%d): %s\n", currentIndex, fn.c_str());
showImage(fn.c_str());
lastSwitch = millis();
}
}

void Slideshow::showImage(const char *path) {
static char persistentPath[256];
strncpy(persistentPath, path, sizeof(persistentPath));
persistentPath[sizeof(persistentPath) - 1] = '\0'; // Sicher terminieren

lv_img_set_src(img, persistentPath);

// lv_obj_invalidate(img); // Hint from internet, but not working

lv_refr_now(NULL); // !!!!! Without refresh the images are not shown. But flickering !!!!!

}

< /code>
setup: < /p>
....
Serial.println("Setup complete.");

// I need to start own "loop" with larger HEAP to process JPEGs. I do not see any stackoverflow!!!!
// I already had debugging and prints within Slideshow.cpp to see heap and stack. Enough space!!!
xTaskCreatePinnedToCore(myLoopTask, "myLoopTask",
32768, // Stackgröße in Bytes (32kB)
NULL, 1, NULL,
1 // Core 1 z.B.
);

< /code>
loop: < /p>
void myLoopTask(void *param) {
for (;;) {
slideshow->update();
lvgl->loop(); // Here: calling lv_timer_handler(); (!)
vTaskDelay(pdMS_TO_TICKS(5));
}
}

void loop() {}



Подробнее здесь: https://stackoverflow.com/questions/797 ... v-refr-now
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»