From d39bf0744124c87e2a12b4beb7be990bcd33a96c Mon Sep 17 00:00:00 2001 From: nick Date: Thu, 11 Jun 2026 01:44:30 -0600 Subject: [PATCH] dashboard: replace vehicle labels with icons --- .../esp32-s3-dashboard/dashboard_config.h | 2 +- .../esp32-s3-dashboard/esp32-s3-dashboard.ino | 87 ++++++++++++++++--- 2 files changed, 75 insertions(+), 14 deletions(-) diff --git a/firmware/esp32-s3-dashboard/dashboard_config.h b/firmware/esp32-s3-dashboard/dashboard_config.h index 0c47277..bb80ffe 100644 --- a/firmware/esp32-s3-dashboard/dashboard_config.h +++ b/firmware/esp32-s3-dashboard/dashboard_config.h @@ -1,6 +1,6 @@ #pragma once -static const char *DASHBOARD_VERSION = "0.1.50-fuel-bar-value-draw"; +static const char *DASHBOARD_VERSION = "0.1.51-vehicle-icons"; // Update these if your Cargo ESP AP credentials are different. static const char *CARGO_WIFI_SSID = "OverlandController"; diff --git a/firmware/esp32-s3-dashboard/esp32-s3-dashboard.ino b/firmware/esp32-s3-dashboard/esp32-s3-dashboard.ino index e625615..d9ea016 100644 --- a/firmware/esp32-s3-dashboard/esp32-s3-dashboard.ino +++ b/firmware/esp32-s3-dashboard/esp32-s3-dashboard.ino @@ -609,6 +609,73 @@ static void update_system_status_label() + +static lv_obj_t *create_coolant_icon(lv_obj_t *parent) +{ + lv_obj_t *icon = lv_obj_create(parent); + lv_obj_set_size(icon, 34, 46); + lv_obj_set_style_bg_opa(icon, LV_OPA_TRANSP, 0); + lv_obj_set_style_border_width(icon, 0, 0); + lv_obj_set_style_pad_all(icon, 0, 0); + lv_obj_clear_flag(icon, LV_OBJ_FLAG_SCROLLABLE); + + lv_obj_t *stem = lv_obj_create(icon); + lv_obj_set_size(stem, 10, 30); + lv_obj_align(stem, LV_ALIGN_TOP_MID, 0, 2); + lv_obj_set_style_radius(stem, 6, 0); + lv_obj_set_style_bg_color(stem, lv_color_hex(0x84CAFF), 0); + lv_obj_set_style_border_width(stem, 0, 0); + + lv_obj_t *bulb = lv_obj_create(icon); + lv_obj_set_size(bulb, 22, 22); + lv_obj_align(bulb, LV_ALIGN_BOTTOM_MID, 0, -1); + lv_obj_set_style_radius(bulb, LV_RADIUS_CIRCLE, 0); + lv_obj_set_style_bg_color(bulb, lv_color_hex(0x84CAFF), 0); + lv_obj_set_style_border_width(bulb, 0, 0); + + return icon; +} + +static lv_obj_t *create_fuel_icon(lv_obj_t *parent) +{ + lv_obj_t *icon = lv_obj_create(parent); + lv_obj_set_size(icon, 34, 34); + lv_obj_set_style_bg_opa(icon, LV_OPA_TRANSP, 0); + lv_obj_set_style_border_width(icon, 0, 0); + lv_obj_set_style_pad_all(icon, 0, 0); + lv_obj_clear_flag(icon, LV_OBJ_FLAG_SCROLLABLE); + + lv_obj_t *body = lv_obj_create(icon); + lv_obj_set_size(body, 18, 26); + lv_obj_align(body, LV_ALIGN_LEFT_MID, 2, 0); + lv_obj_set_style_radius(body, 3, 0); + lv_obj_set_style_bg_color(body, lv_color_hex(0xDDE3EA), 0); + lv_obj_set_style_border_width(body, 0, 0); + + lv_obj_t *window = lv_obj_create(body); + lv_obj_set_size(window, 10, 7); + lv_obj_align(window, LV_ALIGN_TOP_MID, 0, 4); + lv_obj_set_style_radius(window, 1, 0); + lv_obj_set_style_bg_color(window, lv_color_hex(0x17202A), 0); + lv_obj_set_style_border_width(window, 0, 0); + + lv_obj_t *hose = lv_obj_create(icon); + lv_obj_set_size(hose, 12, 4); + lv_obj_align(hose, LV_ALIGN_TOP_RIGHT, -2, 8); + lv_obj_set_style_radius(hose, 2, 0); + lv_obj_set_style_bg_color(hose, lv_color_hex(0xDDE3EA), 0); + lv_obj_set_style_border_width(hose, 0, 0); + + lv_obj_t *nozzle = lv_obj_create(icon); + lv_obj_set_size(nozzle, 4, 14); + lv_obj_align(nozzle, LV_ALIGN_RIGHT_MID, -2, 2); + lv_obj_set_style_radius(nozzle, 2, 0); + lv_obj_set_style_bg_color(nozzle, lv_color_hex(0xDDE3EA), 0); + lv_obj_set_style_border_width(nozzle, 0, 0); + + return icon; +} + static void fuel_bar_draw_value_cb(lv_event_t *e) { lv_obj_draw_part_dsc_t *dsc = lv_event_get_draw_part_dsc(e); @@ -1181,11 +1248,8 @@ static void create_overland_overview_screen() lv_obj_align(temp_tile_name_labels[i], LV_ALIGN_TOP_MID, 0, 86); } - lv_obj_t *coolant_title = lv_label_create(vehicle_card); - lv_label_set_text(coolant_title, "Coolant"); - lv_obj_set_style_text_color(coolant_title, lv_color_hex(0xDDE3EA), 0); - lv_obj_set_style_text_font(coolant_title, &lv_font_montserrat_26, 0); - lv_obj_align(coolant_title, LV_ALIGN_TOP_MID, 0, 4); + lv_obj_t *coolant_icon = create_coolant_icon(vehicle_card); + lv_obj_align(coolant_icon, LV_ALIGN_TOP_LEFT, 12, 8); #if LV_USE_METER vehicle_coolant_meter = lv_meter_create(vehicle_card); @@ -1220,16 +1284,13 @@ static void create_overland_overview_screen() lv_obj_set_style_text_align(vehicle_coolant_value_label, LV_TEXT_ALIGN_CENTER, 0); lv_obj_align(vehicle_coolant_value_label, LV_ALIGN_TOP_MID, 0, 126); - lv_obj_t *fuel_title = lv_label_create(vehicle_card); - lv_label_set_text(fuel_title, "Fuel"); - lv_obj_set_style_text_color(fuel_title, lv_color_hex(0xDDE3EA), 0); - lv_obj_set_style_text_font(fuel_title, &lv_font_montserrat_26, 0); - lv_obj_align(fuel_title, LV_ALIGN_BOTTOM_LEFT, 10, -18); + lv_obj_t *fuel_icon = create_fuel_icon(vehicle_card); + lv_obj_align(fuel_icon, LV_ALIGN_BOTTOM_LEFT, 10, -14); vehicle_fuel_bar = lv_bar_create(vehicle_card); lv_obj_add_event_cb(vehicle_fuel_bar, fuel_bar_draw_value_cb, LV_EVENT_DRAW_PART_END, NULL); - lv_obj_set_size(vehicle_fuel_bar, 190, 22); - lv_obj_align(vehicle_fuel_bar, LV_ALIGN_BOTTOM_LEFT, 64, -21); + lv_obj_set_size(vehicle_fuel_bar, 206, 22); + lv_obj_align(vehicle_fuel_bar, LV_ALIGN_BOTTOM_LEFT, 54, -20); lv_bar_set_range(vehicle_fuel_bar, 0, 100); lv_bar_set_value(vehicle_fuel_bar, 72, LV_ANIM_OFF); lv_obj_set_style_radius(vehicle_fuel_bar, 3, 0); @@ -1247,7 +1308,7 @@ static void create_overland_overview_screen() lv_obj_set_style_bg_color(tick, lv_color_hex(0x7D8996), 0); lv_obj_set_style_border_width(tick, 0, 0); lv_obj_set_style_radius(tick, 0, 0); - lv_obj_align(tick, LV_ALIGN_BOTTOM_LEFT, 64 + (i * 47), -18); + lv_obj_align(tick, LV_ALIGN_BOTTOM_LEFT, 54 + (i * 51), -17); } vehicle_fuel_value_label = lv_label_create(vehicle_card);