From 88dadb4f0e31d8157ddf85987089d655c01be064 Mon Sep 17 00:00:00 2001 From: OPTOC <9159397+optoc@user.noreply.gitee.com> Date: Tue, 21 Oct 2025 12:23:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3RGB=E7=81=AF=E6=AF=8F10?= =?UTF-8?q?=E6=AC=A1=E9=97=AA=E7=83=81=E5=AD=98=E5=9C=A8=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E4=BA=AE=E7=81=AF=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/drivers/led_strip/led_strip.c | 71 +++++++++++++++++-------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/app/drivers/led_strip/led_strip.c b/app/drivers/led_strip/led_strip.c index 403af47..0e63aa2 100644 --- a/app/drivers/led_strip/led_strip.c +++ b/app/drivers/led_strip/led_strip.c @@ -99,39 +99,44 @@ void rgb_update_cyle(uint8_t index, uint16_t cyle) } void rgb_color_change(uint8_t index, uint8_t color) { - switch(color) - { - case RGB_COLOR_RAD: - memcpy(&expression[index], &rgb_color_rad, sizeof(rgb_color_rad)); - break; - case RGB_COLOR_ORANGE: - memcpy(&expression[index], &rgb_color_orange, sizeof(rgb_color_orange)); - break; - case RGB_COLOR_GREEN: - memcpy(&expression[index], &rgb_color_green, sizeof(rgb_color_green)); - break; - case RGB_COLOR_WHITE: - memcpy(&expression[index], &rgb_color_white, sizeof(rgb_color_white)); - break; - case RGB_COLOR_PURPLE: - memcpy(&expression[index], &rgb_color_purple, sizeof(rgb_color_purple)); - break; - case RGB_COLOR_CYAN: - memcpy(&expression[index], &rgb_color_cyan, sizeof(rgb_color_cyan)); - break; - case RGB_COLOR_BLUE: - memcpy(&expression[index], &rgb_color_blue, sizeof(rgb_color_blue)); - break; - case RGB_COLOR_GREEN_WHITE: - memcpy(&expression[index], &rgb_color_green_white, sizeof(rgb_color_green_white)); - break; - case RGB_COLOR_GREEN_PURPLE: - memcpy(&expression[index], &rgb_color_green_purple, sizeof(rgb_color_green_purple)); - break; - default: - break; - } - expression[index].index = index; + static uint8_t rgb_color_lat[EXAMPLE_LED_NUMBERS] = {0}; + if(rgb_color_lat[index] != color) + { + switch(color) + { + case RGB_COLOR_RAD: + memcpy(&expression[index], &rgb_color_rad, sizeof(rgb_color_rad)); + break; + case RGB_COLOR_ORANGE: + memcpy(&expression[index], &rgb_color_orange, sizeof(rgb_color_orange)); + break; + case RGB_COLOR_GREEN: + memcpy(&expression[index], &rgb_color_green, sizeof(rgb_color_green)); + break; + case RGB_COLOR_WHITE: + memcpy(&expression[index], &rgb_color_white, sizeof(rgb_color_white)); + break; + case RGB_COLOR_PURPLE: + memcpy(&expression[index], &rgb_color_purple, sizeof(rgb_color_purple)); + break; + case RGB_COLOR_CYAN: + memcpy(&expression[index], &rgb_color_cyan, sizeof(rgb_color_cyan)); + break; + case RGB_COLOR_BLUE: + memcpy(&expression[index], &rgb_color_blue, sizeof(rgb_color_blue)); + break; + case RGB_COLOR_GREEN_WHITE: + memcpy(&expression[index], &rgb_color_green_white, sizeof(rgb_color_green_white)); + break; + case RGB_COLOR_GREEN_PURPLE: + memcpy(&expression[index], &rgb_color_green_purple, sizeof(rgb_color_green_purple)); + break; + default: + break; + } + expression[index].index = index; + rgb_color_lat[index] = color; + } } void rgb_toggle(uint8_t index, rgb_color_t* rgb_color) {