Hello and thank you for lvgl.
meter = lv_meter_create(lv_scr_act());
lv_meter_indicator_t * indic = lv_meter_add_needle_line(meter, scale, 12, lv_palette_main(LV_PALETTE_GREY), -30);
lv_obj_add_event_cb(
meter,
[](lv_event_t *e) {
lv_obj_t *mete = lv_event_get_target(e);
lv_msg_t *m = lv_event_get_msg(e);
How to acess or update indic (or other lv_meter_indicator_t) value here?
},
LV_EVENT_MSG_RECEIVED, NULL);
lv_msg_subsribe_obj(MSG_INDIC_UPDATE, meter, NULL);
You can make your lv_meter_indication_t* indic global,
or you pass the indic per user data when calling lv_obj_add_event_cb.
It’s the last parameter (in your example the NULL).
In your event call back function you can access the user data with the function lv_event_get_user_data.
1 Like
Thank you!
Solution with user data looks simple but no luck with it:
#define LV_USE_USER_DATA 1
static lv_meter_indicator_t * indic = lv_meter_add_needle_line(meter, scale, 12, lv_palette_main(LV_PALETTE_GREY), -30);
lv_obj_add_event_cb(
meter,
[](lv_event_t *e) {
lv_obj_t * m = lv_event_get_target(e);
lv_meter_indicator_t * i = (lv_meter_indicator_t *)lv_event_get_user_data(e);
lv_msg_t *msg = lv_event_get_msg(e);
const char *v = (const char *)lv_msg_get_payload(msg);
const uint16_t value = atoi(v);
Serial.print(String(value));
// lv_meter_set_indicator_value(m, i, value);
},
LV_EVENT_MSG_RECEIVED, &indic);
lv_msg_subsribe_obj(MSG_INDIC_UPDATE, meter, &indic);
Board (ESP32S3) rebooting on lv_meter_set_indicator_value(m, i, value);