diff options
author | yiancar <yiangosyiangou@cytanet.com.cy> | 2018-05-10 05:31:24 +0100 |
---|---|---|
committer | Jack Humbert <jack.humb@gmail.com> | 2018-05-10 00:31:24 -0400 |
commit | c89565cc3dda82642a0c6c839176602f05fc56f1 (patch) | |
tree | 0dfd9c881bc91396b4854292ab8b047e7fc7c90d /quantum/rgb_matrix.c | |
parent | 03516d546009af0ca4d46989214c8153c70b0712 (diff) | |
download | qmk_firmware-c89565cc3dda82642a0c6c839176602f05fc56f1.tar.gz |
General RGB matrix fixes (#2931)
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* General fixes for RGB_matrix
- Complited speed support for all effects
- Fixed raindrop effects to initialized after toggle
- Fixed raindrop effects to use all available LEDs
- Fixed effect step reverse function
- Moved RGB_MATRIX_SOLID_REACTIVE under correct flag
* Documentation update for RGBmatrix
* More doc updates
Diffstat (limited to 'quantum/rgb_matrix.c')
-rw-r--r-- | quantum/rgb_matrix.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 558e28dec..f3d012bc3 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); } |