Files
WS2812B-LED-RC-Controller/main/main.c
2026-01-05 21:01:26 +01:00

95 lines
2.4 KiB
C

/**
* @file main.c
* @brief Main application entry point for LED Controller
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_system.h"
#include "control.h"
#include "animation.h"
#include "led.h"
static const char *TAG = "MAIN";
#define ANIMATION_UPDATE_RATE_MS 16 // ~60 FPS
/**
* @brief Animation update task
* Runs continuously to update LED animations
*/
static void animation_task(void *pvParameters)
{
ESP_LOGI(TAG, "Animation task started");
TickType_t last_wake_time = xTaskGetTickCount();
const TickType_t update_interval = pdMS_TO_TICKS(ANIMATION_UPDATE_RATE_MS);
while (1)
{
animation_update();
vTaskDelayUntil(&last_wake_time, update_interval);
}
}
/**
* @brief Main application entry point
*/
void app_main(void)
{
ESP_LOGI(TAG, "==============================================");
ESP_LOGI(TAG, " ESP32 LED Controller for Model Aircraft");
ESP_LOGI(TAG, "==============================================");
// Initialize control system (LEDs, PWM, BLE)
esp_err_t ret = control_init();
if (ret != ESP_OK)
{
ESP_LOGE(TAG, "Failed to initialize control system: %s", esp_err_to_name(ret));
ESP_LOGE(TAG, "System halted. Please reset the device.");
while (1)
{
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
// Create animation update task
BaseType_t task_ret = xTaskCreate(
animation_task,
"animation",
4096,
NULL,
5,
NULL);
if (task_ret != pdPASS)
{
ESP_LOGE(TAG, "Failed to create animation task");
ESP_LOGE(TAG, "System halted. Please reset the device.");
while (1)
{
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
ESP_LOGI(TAG, "System initialized successfully");
ESP_LOGI(TAG, "BLE Device Name: LED-Controller");
ESP_LOGI(TAG, "Connect via Web-BLE to configure");
// Main loop - just monitor system status
while (1)
{
vTaskDelay(pdMS_TO_TICKS(5000));
// Periodic status logging
//const controller_config_t *config = control_get_config();
ESP_LOGI(TAG, "Status - Mode: %d, BLE: %s, PWM Active: %s",
control_get_animation_mode(),
control_is_ble_enabled() ? "ON" : "OFF",
"N/A"); // Could add rcsignal_is_active() here
}
}