feat(gui): 灯条亮度调整界面。 close #6.

This commit is contained in:
Ivan Li 2023-05-03 18:10:21 +08:00
parent 324a307fe3
commit 27270c4f6a
5 changed files with 104 additions and 17 deletions

View File

@ -5,18 +5,17 @@ idf_component_register(
"app_nvs.c"
"ch1116.c"
# "apds_9960.c"
# "pca9555.c"
"pca9555.c"
"i2c.c"
"asr_pro.c"
"ci_03t.c"
# "ui_input.c"
"ui_input.c"
# "ambient_light.c"
# "temperature.c"
# "mqtt.c"
"main.c"
"wifi.c"
"light.c"
# "mqtt.c"
"led_strip_encoder/led_strip_encoder.c"
"gui.c"
"lvgl_demo_ui.c"

View File

@ -73,6 +73,13 @@ static lv_anim_t timer_animate;
static lv_obj_t *desktop_label;
static lv_anim_t desktop_animate;
static lv_obj_t *value_setting_panel;
static lv_obj_t *value_setting_bar;
static lv_obj_t *value_setting_label;
static lv_obj_t *value_setting_value_label;
static lv_obj_t *scr;
static void example_lvgl_rounder(lv_disp_drv_t *disp_drv, lv_area_t *area) {
area->y1 = area->y1 & (~0x7);
area->y2 = area->y2 | 0x7;
@ -170,6 +177,92 @@ static void gui_set_server_disconnected() {
lv_label_set_text(desktop_label, APP_DISCONNECTED_SYMBOL);
}
static void gui_bar_value_update_cb(lv_event_t *e) {
lv_obj_draw_part_dsc_t *dsc = lv_event_get_param(e);
if (dsc->part != LV_PART_INDICATOR) return;
lv_obj_t *obj = lv_event_get_target(e);
lv_draw_label_dsc_t label_dsc;
lv_draw_label_dsc_init(&label_dsc);
label_dsc.font = &lv_font_montserrat_8;
char buf[8];
lv_snprintf(buf, sizeof(buf), "%ld", lv_bar_get_value(obj));
lv_point_t txt_size;
lv_txt_get_size(&txt_size, buf, label_dsc.font, label_dsc.letter_space,
label_dsc.line_space, LV_COORD_MAX, label_dsc.flag);
lv_coord_t txt_x;
/*If the indicator is long enough put the text inside on the right*/
if (lv_area_get_width(dsc->draw_area) > txt_size.x + 20) {
txt_x = dsc->draw_area->x2 - 8 - txt_size.x + 1;
lv_obj_set_style_text_color(value_setting_value_label, lv_color_white(),
LV_PART_MAIN);
label_dsc.color = lv_color_white();
}
/*If the indicator is still short put the text out of it on the right*/
else {
txt_x = dsc->draw_area->x2 - 8 + txt_size.x - 1;
lv_obj_set_style_text_color(value_setting_value_label, lv_color_black(),
LV_PART_MAIN);
}
ESP_LOGI(GUI_TAG, "value_setting_value_label: %s", buf);
lv_obj_align(value_setting_value_label, LV_ALIGN_LEFT_MID, txt_x, 0);
lv_label_set_text(value_setting_value_label, buf);
lv_obj_set_width(value_setting_value_label, txt_size.x);
}
static void gui_create_value_setting_panel() {
if (value_setting_panel != NULL) {
return;
}
value_setting_panel = lv_obj_create(scr);
lv_obj_set_size(value_setting_panel, 128, 40);
lv_obj_align(value_setting_panel, LV_ALIGN_BOTTOM_MID, 0, 0);
lv_obj_set_style_border_width(value_setting_panel, 1, LV_PART_MAIN);
lv_obj_set_style_border_color(value_setting_panel, lv_color_black(),
LV_PART_MAIN);
lv_obj_set_style_radius(value_setting_panel, 5, LV_PART_MAIN);
lv_obj_set_style_pad_all(value_setting_panel, 2, LV_PART_MAIN);
value_setting_label = lv_label_create(value_setting_panel);
lv_obj_align(value_setting_label, LV_ALIGN_BOTTOM_LEFT, 0, 0);
value_setting_bar = lv_bar_create(value_setting_panel);
lv_obj_set_size(value_setting_bar, 120, 12);
lv_obj_align(value_setting_bar, LV_ALIGN_TOP_MID, 0, 0);
lv_bar_set_range(value_setting_bar, 0, 100);
lv_bar_set_value(value_setting_bar, 50, LV_ANIM_ON);
lv_obj_set_style_bg_color(value_setting_bar, lv_color_white(), LV_PART_MAIN);
lv_obj_set_style_border_color(value_setting_bar, lv_color_black(),
LV_PART_MAIN);
lv_obj_set_style_border_width(value_setting_bar, 1, LV_PART_MAIN);
lv_obj_set_style_radius(value_setting_bar, 5, LV_PART_MAIN);
lv_obj_set_style_pad_hor(value_setting_bar, 0, LV_PART_MAIN);
lv_obj_set_style_pad_ver(value_setting_bar, 2, LV_PART_MAIN);
lv_obj_set_style_bg_color(value_setting_bar, lv_color_black(),
LV_PART_INDICATOR);
lv_obj_add_event_cb(value_setting_bar, gui_bar_value_update_cb,
LV_EVENT_DRAW_PART_END, NULL);
value_setting_value_label = lv_label_create(value_setting_bar);
lv_obj_align(value_setting_value_label, LV_ALIGN_CENTER, 0, 0);
lv_obj_set_style_text_font(value_setting_value_label, &lv_font_montserrat_8,
LV_PART_MAIN);
}
static void gui_change_strip_level(int32_t target_value) {
gui_create_value_setting_panel();
lv_label_set_text(value_setting_label, "Strip Level");
lv_bar_set_range(value_setting_bar, 0, 255);
lv_bar_set_value(value_setting_bar, target_value, LV_ANIM_ON);
}
void lv_example_bar_6(lv_obj_t *src) {
static lv_style_t style_bar;
lv_style_init(&style_bar);
@ -237,7 +330,7 @@ void gui_status_bar_create(lv_obj_t *scr) {
}
void example_lvgl_demo_ui(lv_disp_t *disp) {
lv_obj_t *scr = lv_disp_get_scr_act(disp);
scr = lv_disp_get_scr_act(disp);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_long_mode(label,
@ -250,6 +343,8 @@ void example_lvgl_demo_ui(lv_disp_t *disp) {
lv_example_bar_6(scr);
gui_status_bar_create(scr);
gui_create_value_setting_panel();
}
static void gui_tick(void *pvParameters) {

View File

@ -14,7 +14,7 @@
#include "service_discovery.c"
// #include "temperature.c"
#include "udp_server.c"
// #include "ui_input.c"
#include "ui_input.c"
#include "wifi.c"
static const char *APP_TAG = "DisplayAmbientLight";
@ -23,7 +23,7 @@ void app_main(void) {
app_nvs_init();
light_init_strip();
// gpio_install_isr_service(0);
gpio_install_isr_service(0);
init_i2c();
i2c_check_slaves();
@ -39,8 +39,8 @@ void app_main(void) {
// apds_9960_init();
// apds_9960_auto_fetch();
// auto_fetch_temperature();
// pca9555_init();
// ui_input_init();
pca9555_init();
ui_input_init();
// xTaskCreate(mqtt_publish_ui_input, "mqtt_publish_ui_input", 2048, NULL, 10,
// NULL);
// vTaskDelay(pdMS_TO_TICKS(10));

View File

@ -3,7 +3,6 @@
#include <stdlib.h>
#include "driver/i2c.h"
#include "embedded_display.c"
#include "esp_log.h"
#include "i2c.c"
@ -79,19 +78,15 @@ void pca9555_fetch(void* arg) {
esp_err_t error;
uint8_t buff;
char disp_str[17];
display_fill_rect(0, 6, 128, 8, 0x00);
for (;;) {
error = pca9555_read_one_input(PCA95555_CMD_INPUT_PORT_1, &buff);
if (error != ESP_OK) {
ESP_LOGW(PCA_9555_TAG, "read failed. %x", error);
} else {
sprintf(disp_str, "IO0: 0x%2x ", buff);
display_print8_str(8, 6, disp_str);
ESP_LOGD(PCA_9555_TAG, "IO0: 0x%2x", buff);
}
vTaskDelay(pdMS_TO_TICKS(10));
}
display_fill_rect(0, 6, 128, 8, 0x00);
}
void pca9555_auto_fetch() {

View File

@ -6,10 +6,10 @@
#include "config_key.h"
#include "driver/gpio.h"
#include "embedded_display.c"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/task.h"
#include "gui.c"
#include "light.c"
#include "pca9555.c"
@ -72,7 +72,6 @@ static void ui_input_update_embedded_display(void *arg) {
sprintf(changing_str, "CVol: % 3d", input.value);
break;
case ui_input_key_display_ambient_lighting_level:
sprintf(changing_str, "ALLv: % 3d", display_ambient_lighting_level);
break;
case ui_input_key_display_ambient_lighting_mode:
sprintf(changing_str, "ALMd: % 3d", input.value);
@ -88,8 +87,6 @@ static void ui_input_update_embedded_display(void *arg) {
strcpy(changing_str, "NC");
break;
}
display_fill_rect(0, 6, 128, 8, 0);
display_print8_str(8, 6, changing_str);
}
}
}
@ -161,6 +158,7 @@ static void encoder_value_change(encoder_state_t *state) {
if (state->value & 1) {
event.key = ui_input_key_display_ambient_lighting_level;
led_strip_set_brightness(display_ambient_lighting_level + delta);
gui_change_strip_level(display_ambient_lighting_level);
} else {
event.key = ui_input_key_display_1_brightness;
}