Add more lvgl arc update parameters (#12066)

This commit is contained in:
bdm310
2025-11-24 22:14:23 -08:00
committed by GitHub
parent 46a26560fd
commit 66a871840e
2 changed files with 53 additions and 13 deletions
+41 -13
View File
@@ -20,7 +20,13 @@ from ..defines import (
CONF_START_ANGLE, CONF_START_ANGLE,
literal, literal,
) )
from ..lv_validation import get_start_value, lv_angle_degrees, lv_float, lv_int from ..lv_validation import (
get_start_value,
lv_angle_degrees,
lv_float,
lv_int,
lv_positive_int,
)
from ..lvcode import lv, lv_expr, lv_obj from ..lvcode import lv, lv_expr, lv_obj
from ..types import LvNumber, NumberType from ..types import LvNumber, NumberType
from . import Widget from . import Widget
@@ -36,13 +42,20 @@ ARC_SCHEMA = cv.Schema(
cv.Optional(CONF_ROTATION, default=0.0): lv_angle_degrees, cv.Optional(CONF_ROTATION, default=0.0): lv_angle_degrees,
cv.Optional(CONF_ADJUSTABLE, default=False): bool, cv.Optional(CONF_ADJUSTABLE, default=False): bool,
cv.Optional(CONF_MODE, default="NORMAL"): ARC_MODES.one_of, cv.Optional(CONF_MODE, default="NORMAL"): ARC_MODES.one_of,
cv.Optional(CONF_CHANGE_RATE, default=720): cv.uint16_t, cv.Optional(CONF_CHANGE_RATE, default=720): lv_positive_int,
} }
) )
ARC_MODIFY_SCHEMA = cv.Schema( ARC_MODIFY_SCHEMA = cv.Schema(
{ {
cv.Optional(CONF_VALUE): lv_float, cv.Optional(CONF_VALUE): lv_float,
cv.Optional(CONF_MIN_VALUE): lv_int,
cv.Optional(CONF_MAX_VALUE): lv_int,
cv.Optional(CONF_START_ANGLE): lv_angle_degrees,
cv.Optional(CONF_END_ANGLE): lv_angle_degrees,
cv.Optional(CONF_ROTATION): lv_angle_degrees,
cv.Optional(CONF_MODE): ARC_MODES.one_of,
cv.Optional(CONF_CHANGE_RATE): lv_positive_int,
} }
) )
@@ -58,17 +71,34 @@ class ArcType(NumberType):
) )
async def to_code(self, w: Widget, config): async def to_code(self, w: Widget, config):
if CONF_MIN_VALUE in config: if CONF_MIN_VALUE in config and CONF_MAX_VALUE in config:
max_value = await lv_int.process(config[CONF_MAX_VALUE]) max_value = await lv_int.process(config[CONF_MAX_VALUE])
min_value = await lv_int.process(config[CONF_MIN_VALUE]) min_value = await lv_int.process(config[CONF_MIN_VALUE])
lv.arc_set_range(w.obj, min_value, max_value) lv.arc_set_range(w.obj, min_value, max_value)
start = await lv_angle_degrees.process(config[CONF_START_ANGLE]) elif CONF_MIN_VALUE in config:
end = await lv_angle_degrees.process(config[CONF_END_ANGLE]) max_value = w.get_property(CONF_MAX_VALUE)
rotation = await lv_angle_degrees.process(config[CONF_ROTATION]) min_value = await lv_int.process(config[CONF_MIN_VALUE])
lv.arc_set_bg_angles(w.obj, start, end) lv.arc_set_range(w.obj, min_value, max_value)
lv.arc_set_rotation(w.obj, rotation) elif CONF_MAX_VALUE in config:
lv.arc_set_mode(w.obj, literal(config[CONF_MODE])) max_value = await lv_int.process(config[CONF_MAX_VALUE])
lv.arc_set_change_rate(w.obj, config[CONF_CHANGE_RATE]) min_value = w.get_property(CONF_MIN_VALUE)
lv.arc_set_range(w.obj, min_value, max_value)
await w.set_property(
CONF_START_ANGLE,
await lv_angle_degrees.process(config.get(CONF_START_ANGLE)),
)
await w.set_property(
CONF_END_ANGLE, await lv_angle_degrees.process(config.get(CONF_END_ANGLE))
)
await w.set_property(
CONF_ROTATION, await lv_angle_degrees.process(config.get(CONF_ROTATION))
)
await w.set_property(CONF_MODE, config)
await w.set_property(
CONF_CHANGE_RATE,
await lv_positive_int.process(config.get(CONF_CHANGE_RATE)),
)
if CONF_ADJUSTABLE in config: if CONF_ADJUSTABLE in config:
if not config[CONF_ADJUSTABLE]: if not config[CONF_ADJUSTABLE]:
@@ -78,9 +108,7 @@ class ArcType(NumberType):
# For some reason arc does not get automatically added to the default group # For some reason arc does not get automatically added to the default group
lv.group_add_obj(lv_expr.group_get_default(), w.obj) lv.group_add_obj(lv_expr.group_get_default(), w.obj)
value = await get_start_value(config) await w.set_property(CONF_VALUE, await get_start_value(config))
if value is not None:
lv.arc_set_value(w.obj, value)
arc_spec = ArcType() arc_spec = ArcType()
+12
View File
@@ -781,6 +781,18 @@ lvgl:
arc_color: 0xFFFF00 arc_color: 0xFFFF00
focused: focused:
arc_color: 0x808080 arc_color: 0x808080
on_click:
then:
- lvgl.arc.update:
id: lv_arc_1
value: !lambda return (int)((float)rand() / RAND_MAX * 100);
min_value: !lambda return (int)((float)rand() / RAND_MAX * 100);
max_value: !lambda return (int)((float)rand() / RAND_MAX * 100);
start_angle: !lambda return (int)((float)rand() / RAND_MAX * 100);
end_angle: !lambda return (int)((float)rand() / RAND_MAX * 100);
rotation: !lambda return (int)((float)rand() / RAND_MAX * 100);
change_rate: !lambda return (uint)((float)rand() / RAND_MAX * 100);
mode: NORMAL
- bar: - bar:
id: bar_id id: bar_id
align: top_mid align: top_mid