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
LVGL 9.3.0 - LV_IMG_SET_SRC требует LV_REFR_NOW? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1752776109
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 , изображения вообще не показаны. Редроу, но это тоже не работает.
[b] Примечание: [/b] объект 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() {}
Подробнее здесь: [url]https://stackoverflow.com/questions/79705113/lvgl-9-3-0-lv-img-set-src-requires-a-lv-refr-now[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия