~ruther/qmk_firmware

e5918cf968f3e2c4a62858ee789748443ba58d10 — Albert Y 3 years ago 030a96a
Heatmap incorrect matrix effect workaround (#16315)

2 files changed, 12 insertions(+), 6 deletions(-)

M docs/feature_rgb_matrix.md
M quantum/rgb_matrix/animations/typing_heatmap_anim.h
M docs/feature_rgb_matrix.md => docs/feature_rgb_matrix.md +7 -6
@@ 657,18 657,19 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi

### RGB Matrix Effect Typing Heatmap :id=rgb-matrix-effect-typing-heatmap

This effect will color the RGB matrix according to a heatmap of recently pressed
keys. Whenever a key is pressed its "temperature" increases as well as that of
its neighboring keys. The temperature of each key is then decreased
automatically every 25 milliseconds by default.
This effect will color the RGB matrix according to a heatmap of recently pressed keys. Whenever a key is pressed its "temperature" increases as well as that of its neighboring keys. The temperature of each key is then decreased automatically every 25 milliseconds by default.

In order to change the delay of temperature decrease define
`RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS`:
In order to change the delay of temperature decrease define `RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS`:

```c
#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 50
```

Heatmap effect may not light up the correct adjacent LEDs for certain key matrix layout such as split keyboards. The following define will limit the effect to pressed keys only:
```c
#define RGB_MATRIX_TYPING_HEATMAP_SLIM
```

## Custom RGB Matrix Effects :id=custom-rgb-matrix-effects

By setting `RGB_MATRIX_CUSTOM_USER = yes` in `rules.mk`, new effects can be defined directly from your keymap or userspace, without having to edit any QMK core files. To declare new effects, create a `rgb_matrix_user.inc` file in the user keymap directory or userspace folder.

M quantum/rgb_matrix/animations/typing_heatmap_anim.h => quantum/rgb_matrix/animations/typing_heatmap_anim.h +5 -0
@@ 7,6 7,10 @@ RGB_MATRIX_EFFECT(TYPING_HEATMAP)
#        endif

void process_rgb_matrix_typing_heatmap(uint8_t row, uint8_t col) {
#        ifdef RGB_MATRIX_TYPING_HEATMAP_SLIM
    // Limit effect to pressed keys
    g_rgb_frame_buffer[row][col] = qadd8(g_rgb_frame_buffer[row][col], 32);
#        else
    uint8_t m_row = row - 1;
    uint8_t p_row = row + 1;
    uint8_t m_col = col - 1;


@@ 27,6 31,7 @@ void process_rgb_matrix_typing_heatmap(uint8_t row, uint8_t col) {
        g_rgb_frame_buffer[m_row][col] = qadd8(g_rgb_frame_buffer[m_row][col], 16);
        if (p_col < MATRIX_COLS) g_rgb_frame_buffer[m_row][p_col] = qadd8(g_rgb_frame_buffer[m_row][p_col], 13);
    }
#        endif
}

// A timer to track the last time we decremented all heatmap values.