diff --git a/bike.c b/bike.c index b14b42a..f70eb85 100644 --- a/bike.c +++ b/bike.c @@ -18,7 +18,27 @@ LV_FONT_DECLARE(lv_font_din_16); static void battery_timer_cb(lv_timer_t* timer) { int8_t battery_percent = lv_battery_indicator_get_percentage(battery_indicator); - battery_percent -= 1; + battery_percent -= 1; + static int accelerating = 0; + + if (speed_meter != NULL) { + if (accelerating) { + + lv_speedmeter_set_speed(speed_meter, lv_speedmeter_get_speed(speed_meter) + 1.5f); + + if (lv_speedmeter_get_speed(speed_meter) >= 90.0f) { + accelerating = 0; + } + } + else { + lv_speedmeter_set_speed(speed_meter, lv_speedmeter_get_speed(speed_meter) - 1.0f); + + if (lv_speedmeter_get_speed(speed_meter) <= 0.0f) { + accelerating = 1; + } + } + } + if (battery_percent < 0) { battery_percent = 100; diff --git a/widgets/speedmeter.c b/widgets/speedmeter.c index cd653d2..284638b 100644 --- a/widgets/speedmeter.c +++ b/widgets/speedmeter.c @@ -193,7 +193,9 @@ lv_obj_t* lv_speedmeter_create(lv_obj_t* parent, int max_speed, const char* unit void lv_speedmeter_set_speed(lv_obj_t* obj, float speed) { lv_speedmeter_t* self = (lv_speedmeter_t*)obj; self->speed = speed; - lv_arc_set_value(self->speed_arc, (int)(self->speed / self->max_speed)); + int arc_value = (int)(self->speed / self->max_speed * 100.0); + lv_arc_set_value(self->speed_arc, arc_value); + lv_obj_send_event(self->speed_arc, LV_EVENT_VALUE_CHANGED, NULL); } float lv_speedmeter_get_speed(lv_obj_t* obj) {