qmk开源键盘 rgb_matrix_indicators_advanced_user函数

rgb_matrix_indicators_advanced_user 是 QMK 固件中用于自定义 RGB 矩阵指示器的一个钩子函数。它允许用户根据键盘状态(例如按键状态、层状态等)来动态地控制 RGB 矩阵的灯光效果。通过这个函数,您可以实现复杂的灯光效果和状态指示。

函数原型

复制代码
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max);
  • led_minled_max 参数定义了需要更新的 LED 范围,通常用于优化性能,以避免不必要的更新。

示例

以下是一个示例代码,展示如何使用 rgb_matrix_indicators_advanced_user 函数来根据当前激活的层来改变 RGB 矩阵的灯光效果。

cpp 复制代码
#include "quantum.h"

// 定义不同层的颜色
#define LAYER_0_COLOR RGB_RED
#define LAYER_1_COLOR RGB_GREEN
#define LAYER_2_COLOR RGB_BLUE

void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
    // 获取当前激活的层
    uint8_t layer = biton32(layer_state);

    // 遍历所有 LED
    for (uint8_t i = led_min; i < led_max; i++) {
        // 获取 LED 的位置
        LED_TYPE *led = &g_led_config[i];

        // 根据当前层设置 LED 颜色
        switch (layer) {
            case 0:
                rgb_matrix_set_color(i, LAYER_0_COLOR);
                break;
            case 1:
                rgb_matrix_set_color(i, LAYER_1_COLOR);
                break;
            case 2:
                rgb_matrix_set_color(i, LAYER_2_COLOR);
                break;
            default:
                // 其他层默认关闭 LED
                rgb_matrix_set_color(i, 0, 0, 0);
                break;
        }
    }
}

解释

  1. 获取当前层 :使用 biton32(layer_state) 获取当前激活的层。
  2. 遍历所有 LED :使用 for 循环遍历所有 LED,从 led_minled_max
  3. 设置 LED 颜色 :根据当前层,使用 rgb_matrix_set_color 函数设置 LED 的颜色。

进一步的自定义

您可以根据需要进一步自定义 rgb_matrix_indicators_advanced_user 函数,例如:

  • 根据按键状态改变颜色 :使用 keyboard_report->keys 检查哪些键被按下,并相应地改变 LED 颜色。
  • 实现动态效果:例如根据时间或其他事件改变 LED 颜色,创建动态的灯光效果。

示例:根据按键状态改变颜色

以下是一个示例代码,展示如何根据按键状态来改变 LED 颜色:

cpp 复制代码
#include "quantum.h"

void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
    // 获取当前激活的层
    uint8_t layer = biton32(layer_state);

    // 遍历所有 LED
    for (uint8_t i = led_min; i < led_max; i++) {
        // 获取 LED 的位置
        LED_TYPE *led = &g_led_config[i];

        // 根据当前层设置 LED 颜色
        switch (layer) {
            case 0:
                rgb_matrix_set_color(i, RGB_RED);
                break;
            case 1:
                rgb_matrix_set_color(i, RGB_GREEN);
                break;
            case 2:
                rgb_matrix_set_color(i, RGB_BLUE);
                break;
            default:
                // 其他层默认关闭 LED
                rgb_matrix_set_color(i, 0, 0, 0);
                break;
        }
    }

    // 根据按键状态改变 LED 颜色
    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
        for (uint8_t j = 0; j < MATRIX_COLS; j++) {
            if (matrix_is_on(i, j)) {
                uint8_t led_index = g_led_config.matrix_co[i][j];
                if (led_index != NO_LED) {
                    rgb_matrix_set_color(led_index, RGB_WHITE);  // 按键被按下时设置为白色
                }
            }
        }
    }
}

解释

  1. 遍历所有 LED 并设置颜色:根据当前层设置所有 LED 的颜色。
  2. 根据按键状态改变颜色:遍历键盘矩阵,检查哪些键被按下,并将对应的 LED 设置为白色。

通过这些示例,您可以根据自己的需求自定义 rgb_matrix_indicators_advanced_user 函数,实现丰富多彩的 RGB 矩阵灯光效果

相关推荐
Harvey664 小时前
2026年05月01日最热门的开源项目(Github)
开源项目·周榜·月榜·活跃项目·热门项目·github 榜单·2026年05月01日
James_WangA7 小时前
我给 AOI 设备装了一个 Agent,然后发现工具注册才是最难写的
架构·github
James_WangA7 小时前
产线上跑 Agent:LLM 挂了不是 500 错误,是停线
架构·github
Hommy8812 小时前
【开源剪映小助手】字幕接口
开源·github·aigc·剪映小助手·视频剪辑自动化
byte轻骑兵12 小时前
【HID】规范精讲[8]: 蓝牙HID核心之L2CAP层——无线人机交互的通信桥梁设计解析
人工智能·人机交互·蓝牙·键盘·hid
一袋米扛几楼9813 小时前
【Git】规范化协作:详解 GitHub 工作流中的 Issue、Branch 与 Pull Request 最佳实践
前端·git·github·issue
尘埃落定wf14 小时前
# GitHub CLI:告别繁琐的 Git 命令,让开发更高效
git·github
zh_xuan14 小时前
上传api调试工具到github
github
XD74297163616 小时前
科技早报晚报|2026年5月2日:Spec 驱动开发、空口隔离交付与时序预测 Copilot,今天最值得跟进的 3 个机会
驱动开发·科技·copilot·开源项目·科技新闻·开发者工具
XD74297163616 小时前
科技早报晚报|2026年5月2日:给 AI Agent 的三件基建——桌面抓手、上下文沙箱与项目记忆
人工智能·科技·开源项目·科技新闻·ai agent·开发者工具·科技晚报