반응형
공통사항
- 개체는 setup()에 한 번만 정의할 것.
- 동적 개체 생성은 이벤트로 처리할 것.
- 실시간 데이터 변경은 loop()나 타이머 콜백에 정의할 것.
제일 간단한 타이머 핸들러 코드
void loop()
{
lv_timer_periodic_handler();
}
한 줄이면 LVGL이 작동한다. 5ms 지연? 그딴거 필요 없다. 자동으로 처리한다.
개체 만들기
개체 생성 후 부모 바꾸기
void setup()
{
lv_obj_t *mybar = lv_bar_create(lv_screen_active());
lv_obj_set_parent(mybar, objects.screen1);
}
parent의 기본이 되는 화면은 lv_screen_active()이다.
개체 스타일 공유하기
lv_obj_t *screen1;
lv_obj_t *screen2;
lv_obj_t *button1;
lv_obj_t *button2;
// 공유할 버튼 스타일
static lv_style_t shared_btn_style;
void setup() {
// 공유 스타일 초기화
lv_style_init(&shared_btn_style);
lv_style_set_bg_color(&shared_btn_style, lv_color_hex(0xFF0000)); // 초기 버튼 색상: 빨간색
// 화면 생성
screen1 = lv_obj_create(NULL);
screen2 = lv_obj_create(NULL);
// 각 화면에 버튼 생성
button1 = create_shared_button(screen1);
button2 = create_shared_button(screen2);
// 처음에는 screen1을 로드
lv_scr_load(screen1);
}
lv_obj_t *create_shared_button(lv_obj_t *parent) {
lv_obj_t *btn = lv_btn_create(parent);
lv_obj_add_style(btn, &shared_btn_style, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_center(btn);
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "Shared Button");
// 이벤트 콜백 등록
lv_obj_add_event_cb(btn, shared_button_event_handler, LV_EVENT_ALL, NULL);
return btn;
}
void shared_button_event_handler(lv_event_t *e) {
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_CLICKED) {
// 버튼이 클릭되었을 때 색상 변경
static bool toggled = false;
toggled = !toggled;
if(toggled) {
lv_style_set_bg_color(&shared_btn_style, lv_color_hex(0x00FF00)); // 초록색으로 변경
} else {
lv_style_set_bg_color(&shared_btn_style, lv_color_hex(0xFF0000)); // 빨간색으로 변경
}
// 두 버튼 모두 스타일 업데이트
lv_obj_refresh_style(button1, LV_PART_MAIN, LV_STYLE_PROP_ALL);
lv_obj_refresh_style(button2, LV_PART_MAIN, LV_STYLE_PROP_ALL);
}
}
copilot이 만든것이라 장담 못함.
효과
그라디언트
lv_conf.h에서 LV_USE_DRAW_SW_COMPLEX_GRADIENTS 값을 1로 지정한다. 그라디언트 단계는 LV_GRADIENT_MAX_STOPS 값을 조정한다.
C 언어
변수
개체를 생성하는 메서드 내에서 const char *var[10]; 처럼 변수를 선언할 때 리부팅 현상이 발생한다. 이때 static을 앞에 붙여야 한다.
static const char *var[10];
반응형