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) {