Added macros to Dynamic Keymaps, Zeal60 RGB backlight improvements (#4520)
[jackhill/qmk/firmware.git] / docs / feature_encoders.md
CommitLineData
85688e5b
JH
1# Encoders
2
3Basic encoders are supported by adding this to your `rules.mk`:
4
5 ENCODER_ENABLE = yes
6
7and this to your `config.h`:
8
9 #define NUMBER_OF_ENCODERS 1
10 #define ENCODERS_PAD_A { B12 }
11 #define ENCODERS_PAD_B { B13 }
12
13Each PAD_A/B variable defines an array so multiple encoders can be defined, e.g.:
14
15 #define ENCODERS_PAD_A { encoder1a, encoder2a }
16 #define ENCODERS_PAD_B { encoder1a, encoder2b }
17
18If your encoder's clockwise directions are incorrect, you can swap the A & B pad definitions.
19
20Additionally, the resolution can be specified in the same file (the default & suggested is 4):
21
22 #define ENCODER_RESOLUTION 4
23
24## Callbacks
25
26The callback functions can be inserted into your `<keyboard>.c`:
27
28 void encoder_update_kb(uint8_t index, bool clockwise) {
29 encoder_update_user(index, clockwise);
30 }
31
32or `keymap.c`:
33
34 void encoder_update_user(uint8_t index, bool clockwise) {
24b3556e
JH
35 if (index == 0) {
36 if (clockwise) {
37 register_code(KC_PGDN);
38 unregister_code(KC_PGDN);
39 } else {
40 register_code(KC_PGUP);
41 unregister_code(KC_PGUP);
42 }
43 }
85688e5b
JH
44 }
45
85688e5b
JH
46## Hardware
47
48The A an B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground.