旋钮编码器是一种可旋转的输入设备,常用于音量调节、光标移动等交互场景。在自定义键盘中,它可以大大提升操作效率和用户体验。QMK固件原生支持EC11等常见的旋钮编码器,本文将详细介绍如何在自定义键盘中配置和使用旋钮编码器。
旋钮编码器的硬件连接非常简单:
在QMK中,有两种方式启用编码器功能:
在rules.mk
文件中添加:
ENCODER_ENABLE = yes
QMK的发展趋势是使用info.json
配置,所以建议在info.json
文件的features
部分添加:
{
"features": {
"encoder": true
}
}
在config.h
中定义编码器引脚:
#define ENCODER_A_PINS { B12 }
#define ENCODER_B_PINS { B13 }
在info.json
中配置:
{
"encoders": {
"rotary": [
{
"pin_a": "A9",
"pin_b": "A10",
"resolution": 4
}
]
}
}
这里的配置说明:
pin_a
和pin_b
:对应编码器的A和B引脚连接到MCU的哪个引脚resolution
:指主控收到多少个脉冲触发一次动作,通常EC11编码器填4即可如果有多个编码器,可以在rotary
数组中添加多组配置。
有两种方式配置编码器的功能:编码器映射(Encoder Map)和回调函数(Callback)。建议使用编码器映射方式,因为它可读性更好,并且与VIA/VIAL兼容。
在键盘布局目录下的rules.mk
中添加:
ENCODER_MAP_ENABLE = yes
在keymap.c
中添加编码器映射配置:
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, // 基础层:逆时针降低音量,顺时针增加音量
[1] = { ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, // 第一层:逆时针左方向键,顺时针右方向键
};
#endif
说明:
[0]
、[1]
表示键盘的不同层ENCODER_CCW_CW
中的两个参数分别是逆时针旋转和顺时针旋转的功能可以在config.h
中调整编码器分辨率:
#define ENCODER_RESOLUTION 4
也可以为每个编码器单独设置分辨率:
#define ENCODER_RESOLUTIONS { 4, 2 }
如果编码器旋转方向不符合预期,可以在config.h
中添加:
#define ENCODER_DIRECTION_FLIP
对于4×编码器,如果在改变方向时跳过脉冲,可以设置默认位置:
#define ENCODER_DEFAULT_POS 0x3
分体键盘的左右两侧可以使用不同的编码器配置:
#define ENCODER_A_PINS_RIGHT { B12 }
#define ENCODER_B_PINS_RIGHT { B13 }
#define ENCODER_RESOLUTIONS_RIGHT { 4 }
在某些情况下,可以让多个编码器共享引脚以节省GPIO资源:
#define ENCODER_A_PINS { B1, B1 }
#define ENCODER_B_PINS { B2, B3 }
这种配置允许使用3个引脚支持2个编码器,但要注意:
甚至可以使用三个引脚支持三个编码器:
#define ENCODER_A_PINS { B1, B1, B2 }
#define ENCODER_B_PINS { B2, B3, B3 }
但此时同时旋转共享引脚的编码器可能会产生不正确的输出。
如果不使用编码器映射,也可以通过回调函数配置编码器:
在keymap.c
中:
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { // 第一个编码器
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
} else if (index == 1) { // 第二个编码器
if (clockwise) {
rgb_matrix_increase_hue();
} else {
rgb_matrix_decrease_hue();
}
}
return false; // 返回false会覆盖键盘级函数
}
ENCODER_DIRECTION_FLIP
ENCODER_RESOLUTION
值KC_VOLU
/KC_VOLD
KC_PGUP
/KC_PGDN
KC_MNXT
/KC_MPRV
RGB_HUI
/RGB_HUD
KC_WH_U
/KC_WH_D
配合按键修饰符旋钮编码器是提升自定义键盘功能性的绝佳方式,通过QMK固件可以轻松配置各种实用功能。希望本指南能帮助你在自己的键盘项目中顺利使用旋钮编码器!
参考资料: