LED_shit/main/ui.c
2025-12-01 21:24:54 +00:00

89 lines
2.0 KiB
C

// ui.c
#include "ui.h"
#include "display.h"
#include "led_driver.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include <time.h>
static menu_state_t g_menu = MENU_OFF;
void ui_set_menu(menu_state_t s)
{
g_menu = s;
}
void ui_menu_next(void)
{
if (g_menu == MENU_OFF) return;
g_menu++;
if (g_menu > MENU_TEST_DISP)
g_menu = MENU_MAIN;
}
static void ui_render_menu(void)
{
switch (g_menu) {
case MENU_MAIN: display_text("MENU"); break;
case MENU_PERC: display_text("PERC"); break;
case MENU_READ: display_text("READ"); break;
case MENU_TEST_LED: display_text("LEDS"); break;
case MENU_TEST_DISP: display_text("DISP"); break;
default: break;
}
}
void ui_menu_ok(void)
{
switch (g_menu) {
case MENU_PERC:
// aqui no futuro: mostra % atual, muda via MQTT, etc
display_text("70%");
break;
case MENU_READ:
// aqui no futuro: mostra entradas/saídas da EEPROM
display_text("CNT ");
break;
case MENU_TEST_LED:
// efeito simples na roda
led_clear();
for (int i = 0; i < led_get_count(); i++) {
led_set_pixel(i, 0, 0, 40);
led_show();
vTaskDelay(pdMS_TO_TICKS(10));
}
break;
case MENU_TEST_DISP:
display_text("8888");
vTaskDelay(pdMS_TO_TICKS(500));
display_clear();
break;
default:
break;
}
}
void ui_task(void *pv)
{
while (1) {
if (g_menu == MENU_OFF) {
// modo normal → relógio + LED do segundo
time_t now = time(NULL);
struct tm t;
localtime_r(&now, &t);
display_set_time(t.tm_hour, t.tm_min);
// aqui podes chamar a animação da roda (se quiseres relógio visual)
} else {
ui_render_menu();
}
vTaskDelay(pdMS_TO_TICKS(200));
}
}