diff --git a/main/animation.c b/main/animation.c index d93c1cd..229bd4e 100644 --- a/main/animation.c +++ b/main/animation.c @@ -211,9 +211,7 @@ static void anim_bpm(void) static void anim_navigation(void) { - // Navigation lights: left red, right green, with blinking white - static uint8_t blink_state = 0; - + // Navigation lights: left red, right green led_clear_all(); uint16_t num_leds_a = led_get_num_leds_a(); @@ -221,51 +219,22 @@ static void anim_navigation(void) rgb_t red = {255, 0, 0}; rgb_t green = {0, 255, 0}; - rgb_t white = {255, 255, 255}; - // Left side red (first 3 LEDs of strip A) + // Side red (last 3 LEDs of strip A) if (num_leds_a >= 3) { - led_set_pixel_a(0, red); - led_set_pixel_a(1, red); - led_set_pixel_a(2, red); + led_set_pixel_a(num_leds_a - 1, red); + led_set_pixel_a(num_leds_a - 2, red); + led_set_pixel_a(num_leds_a - 3, red); } - // Right side green (last 3 LEDs) + // Side green (last 3 LEDs of strip B) if (num_leds_b >= 3) { led_set_pixel_b(num_leds_b - 1, green); led_set_pixel_b(num_leds_b - 2, green); led_set_pixel_b(num_leds_b - 3, green); } - else if (num_leds_a >= 6) - { - led_set_pixel_a(num_leds_a - 1, green); - led_set_pixel_a(num_leds_a - 2, green); - led_set_pixel_a(num_leds_a - 3, green); - } - - // Blinking white lights (positions 5-6 and 37-38 from original) - if (blink_state < FRAMES_PER_SECOND / 2) - { - if (num_leds_a > 6) - { - led_set_pixel_a(5, white); - led_set_pixel_a(6, white); - } - if (num_leds_b > 2) - { - led_set_pixel_b(1, white); - led_set_pixel_b(2, white); - } - else if (num_leds_a > 38) - { - led_set_pixel_a(37, white); - led_set_pixel_a(38, white); - } - } - - blink_state = (blink_state + 1) % FRAMES_PER_SECOND; } static void anim_chase(void) @@ -357,31 +326,26 @@ static void anim_random(void) esp_err_t animation_init(void) { current_mode = ANIM_BLACK; - global_hue = 0; - frame_counter = 0; + global_hue = 0U; + frame_counter = 0U; - ESP_LOGI(TAG, "Animation system initialized"); + ESP_LOGI(TAG, "Animation initialized"); return ESP_OK; } void animation_set_mode(animation_mode_t mode) { - if (mode >= ANIM_MODE_COUNT) + if ((mode >= ANIM_MODE_COUNT) || (mode < 0U)) { mode = ANIM_BLACK; } current_mode = mode; - frame_counter = 0; + frame_counter = 0U; ESP_LOGI(TAG, "Animation mode set to: %s", animation_get_mode_name(mode)); } -animation_mode_t animation_get_mode(void) -{ - return current_mode; -} - void animation_update(void) { // Update global hue every frame (slowly cycles colors) @@ -410,31 +374,31 @@ void animation_update(void) anim_white(); break; case ANIM_RAINBOW: - anim_rainbow(); + //anim_rainbow(); break; case ANIM_RAINBOW_GLITTER: - anim_rainbow_glitter(); + //anim_rainbow_glitter(); break; case ANIM_CONFETTI: - anim_confetti(); + //anim_confetti(); break; case ANIM_SINELON: - anim_sinelon(); + //anim_sinelon(); break; case ANIM_BPM: - anim_bpm(); + //anim_bpm(); break; case ANIM_NAVIGATION: anim_navigation(); break; case ANIM_CHASE: - anim_chase(); + //anim_chase(); break; case ANIM_CHASE_RGB: - anim_chase_rgb(); + //anim_chase_rgb(); break; case ANIM_RANDOM: - anim_random(); + //anim_random(); break; default: anim_black(); @@ -456,7 +420,7 @@ const char *animation_get_mode_name(animation_mode_t mode) "Rainbow with Glitter", "Confetti", "Sinelon", - "BPM", + "33BPM", "Navigation", "Chase", "Chase RGB", diff --git a/main/animation.h b/main/animation.h index e797b6d..1fce6fc 100644 --- a/main/animation.h +++ b/main/animation.h @@ -43,12 +43,6 @@ esp_err_t animation_init(void); */ void animation_set_mode(animation_mode_t mode); -/** - * @brief Get current animation mode - * @return Current mode - */ -animation_mode_t animation_get_mode(void); - /** * @brief Update animation (call periodically, e.g., 30-60 FPS) */ @@ -59,6 +53,6 @@ void animation_update(void); * @param mode Animation mode * @return Mode name string */ -const char* animation_get_mode_name(animation_mode_t mode); +const char *animation_get_mode_name(animation_mode_t mode); #endif // ANIMATION_H diff --git a/main/control.c b/main/control.c index f0c95fa..b01448a 100644 --- a/main/control.c +++ b/main/control.c @@ -24,15 +24,6 @@ static void on_mode_change() animation_set_mode((animation_mode_t)current_animation_mode); } -void control_set_animation_mode(uint8_t mode) -{ - if (mode >= ANIM_MODE_COUNT) - { - mode = 0; - } - on_mode_change(mode); -} - uint8_t control_get_animation_mode(void) { return current_animation_mode; @@ -58,7 +49,7 @@ esp_err_t control_init(void) // Initialize LED strips ret = led_init(current_config.led_pin_strip_a, current_config.led_pin_strip_b, - current_config.led_count_strip_a, current_config.led_count_strip_a); + current_config.led_count_strip_a, current_config.led_count_strip_b); if (ret != ESP_OK) { ESP_LOGE(TAG, "LED init failed: %s", esp_err_to_name(ret)); diff --git a/main/control.h b/main/control.h index be07140..87c3a2e 100644 --- a/main/control.h +++ b/main/control.h @@ -18,12 +18,6 @@ */ esp_err_t control_init(void); -/** - * @brief Set animation mode manually - * @param mode Animation mode (0-13) - */ -void control_set_animation_mode(uint8_t mode); - /** * @brief Get current animation mode * @return Current mode (0-13) diff --git a/main/led.c b/main/led.c index 53ce7e4..de782b5 100644 --- a/main/led.c +++ b/main/led.c @@ -321,7 +321,10 @@ static void show_strip(led_strip_t *strip) // Convert RGB to GRB for WS2812B uint8_t *grb_data = malloc(strip->num_leds * 3); if (!grb_data) + { + ESP_LOGE(TAG, "Failed to allocate GRB buffer"); return; + } for (uint16_t i = 0; i < strip->num_leds; i++) { @@ -334,7 +337,21 @@ static void show_strip(led_strip_t *strip) .loop_count = 0, }; - rmt_transmit(strip->rmt_channel, strip->encoder, grb_data, strip->num_leds * 3, &tx_config); + esp_err_t ret = rmt_transmit(strip->rmt_channel, strip->encoder, grb_data, strip->num_leds * 3, &tx_config); + if (ret != ESP_OK) + { + ESP_LOGE(TAG, "RMT transmit failed: %s", esp_err_to_name(ret)); + free(grb_data); + return; + } + + // Wait for transmission to complete before freeing buffer + ret = rmt_tx_wait_all_done(strip->rmt_channel, pdMS_TO_TICKS(100)); + if (ret != ESP_OK) + { + ESP_LOGW(TAG, "RMT wait timeout"); + } + free(grb_data); } diff --git a/main/main.c b/main/main.c index 49387db..3d0e493 100644 --- a/main/main.c +++ b/main/main.c @@ -76,6 +76,8 @@ void app_main(void) } } + animation_set_mode((animation_mode_t)control_get_animation_mode()); + ESP_LOGI(TAG, "System initialized successfully"); // Main loop - just monitor system status @@ -84,6 +86,6 @@ void app_main(void) vTaskDelay(pdMS_TO_TICKS(5000)); // Periodic status logging - ESP_LOGI(TAG, "Status - Mode: %d", control_get_animation_mode()); + ESP_LOGI(TAG, "Animation Mode set to: %s", animation_get_mode_name(control_get_animation_mode())); } }