반응형

공통사항

  • 개체는 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];

 

반응형

관련글