diff options
-rw-r--r-- | docs/feature_rgb_matrix.md | 4 | ||||
-rw-r--r-- | quantum/rgb_matrix.c | 29 | ||||
-rw-r--r-- | quantum/rgb_matrix.h | 2 |
3 files changed, 19 insertions, 16 deletions
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 084e87ec48..5d2db3b970 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -81,7 +81,6 @@ These are the effects that are currently available: enum rgb_matrix_effects { RGB_MATRIX_SOLID_COLOR = 1, - RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_ALPHAS_MODS, RGB_MATRIX_DUAL_BEACON, RGB_MATRIX_GRADIENT_UP_DOWN, @@ -94,6 +93,7 @@ These are the effects that are currently available: RGB_MATRIX_RAINBOW_MOVING_CHEVRON, RGB_MATRIX_JELLYBEAN_RAINDROPS, #ifdef RGB_MATRIX_KEYPRESSES + RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_SPLASH, RGB_MATRIX_MULTISPLASH, RGB_MATRIX_SOLID_SPLASH, @@ -118,7 +118,7 @@ A similar function works in the keymap as `rgb_matrix_indicators_user`. #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened) #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended - #define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) + #define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) if not defined defaults to 1 ## EEPROM storage diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 558e28dece..f3d012bc3e 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -324,8 +324,8 @@ void rgb_matrix_raindrops(bool initialize) { HSV hsv; RGB rgb; - // Change one LED every tick - uint8_t led_to_change = ( g_tick & 0x000 ) == 0 ? rand() % DRIVER_LED_TOTAL : 255; + // Change one LED every tick, make sure speed is not 0 + uint8_t led_to_change = ( g_tick & ( 0x0A / (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed) ) ) == 0 ? rand() % (DRIVER_LED_TOTAL) : 255; for ( int i=0; i<DRIVER_LED_TOTAL; i++ ) { @@ -432,7 +432,7 @@ void rgb_matrix_rainbow_beacon(void) { rgb_led led; for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { led = g_rgb_leds[i]; - hsv.h = 1.5 * (led.point.y - 32.0)* cos(g_tick * PI / 128) + 1.5 * (led.point.x - 112.0) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; + hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.y - 32.0)* cos(g_tick * PI / 128) + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.x - 112.0) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -444,7 +444,7 @@ void rgb_matrix_rainbow_pinwheels(void) { rgb_led led; for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { led = g_rgb_leds[i]; - hsv.h = 2 * (led.point.y - 32.0)* cos(g_tick * PI / 128) + 2 * (66 - abs(led.point.x - 112.0)) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; + hsv.h = (2 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.y - 32.0)* cos(g_tick * PI / 128) + (2 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (66 - abs(led.point.x - 112.0)) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -458,7 +458,7 @@ void rgb_matrix_rainbow_moving_chevron(void) { led = g_rgb_leds[i]; // uint8_t r = g_tick; uint8_t r = 32; - hsv.h = 1.5 * abs(led.point.y - 32.0)* sin(r * PI / 128) + 1.5 * (led.point.x - (g_tick / 256.0 * 224)) * cos(r * PI / 128) + rgb_matrix_config.hue; + hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * abs(led.point.y - 32.0)* sin(r * PI / 128) + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.x - (g_tick / 256.0 * 224)) * cos(r * PI / 128) + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -469,8 +469,8 @@ void rgb_matrix_jellybean_raindrops( bool initialize ) { HSV hsv; RGB rgb; - // Change one LED every tick - uint8_t led_to_change = ( g_tick & 0x000 ) == 0 ? rand() % DRIVER_LED_TOTAL : 255; + // Change one LED every tick, make sure speed is not 0 + uint8_t led_to_change = ( g_tick & ( 0x0A / (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed) ) ) == 0 ? rand() % (DRIVER_LED_TOTAL) : 255; for ( int i=0; i<DRIVER_LED_TOTAL; i++ ) { @@ -577,8 +577,10 @@ void rgb_matrix_custom(void) { } void rgb_matrix_task(void) { + static uint8_t toggle_enable_last = 255; if (!rgb_matrix_config.enable) { rgb_matrix_all_off(); + toggle_enable_last = rgb_matrix_config.enable; return; } // delay 1 second before driving LEDs or doing anything else @@ -618,8 +620,9 @@ void rgb_matrix_task(void) { // detect change in effect, so each effect can // have an optional initialization. static uint8_t effect_last = 255; - bool initialize = effect != effect_last; + bool initialize = (effect != effect_last) || (rgb_matrix_config.enable != toggle_enable_last); effect_last = effect; + toggle_enable_last = rgb_matrix_config.enable; // this gets ticked at 20 Hz. // each effect can opt to do calculations @@ -628,9 +631,6 @@ void rgb_matrix_task(void) { case RGB_MATRIX_SOLID_COLOR: rgb_matrix_solid_color(); break; - case RGB_MATRIX_SOLID_REACTIVE: - rgb_matrix_solid_reactive(); - break; case RGB_MATRIX_ALPHAS_MODS: rgb_matrix_alphas_mods(); break; @@ -665,6 +665,9 @@ void rgb_matrix_task(void) { rgb_matrix_jellybean_raindrops( initialize ); break; #ifdef RGB_MATRIX_KEYPRESSES + case RGB_MATRIX_SOLID_REACTIVE: + rgb_matrix_solid_reactive(); + break; case RGB_MATRIX_SPLASH: rgb_matrix_splash(); break; @@ -830,8 +833,8 @@ void rgblight_step(void) { void rgblight_step_reverse(void) { rgb_matrix_config.mode--; - if (rgb_matrix_config.mode <= 1) - rgb_matrix_config.mode = (RGB_MATRIX_EFFECT_MAX - 1); + if (rgb_matrix_config.mode < 1) + rgb_matrix_config.mode = RGB_MATRIX_EFFECT_MAX - 1; eeconfig_update_rgb_matrix(rgb_matrix_config.raw); } diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index 1552d59103..aaa85d5f51 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -64,7 +64,6 @@ typedef union { enum rgb_matrix_effects { RGB_MATRIX_SOLID_COLOR = 1, - RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_ALPHAS_MODS, RGB_MATRIX_DUAL_BEACON, RGB_MATRIX_GRADIENT_UP_DOWN, @@ -77,6 +76,7 @@ enum rgb_matrix_effects { RGB_MATRIX_RAINBOW_MOVING_CHEVRON, RGB_MATRIX_JELLYBEAN_RAINDROPS, #ifdef RGB_MATRIX_KEYPRESSES + RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_SPLASH, RGB_MATRIX_MULTISPLASH, RGB_MATRIX_SOLID_SPLASH, |