Some work on encoder docs

This commit is contained in:
Kevin
2020-09-01 21:12:09 -07:00
parent af6ddfb7e2
commit 068626d1a7
3 changed files with 92 additions and 2 deletions

View File

@@ -3,4 +3,38 @@ title: Encoders
sidebar_label: Encoders
---
TODO: Documentation on encoders.
Existing support for encoders in ZMK is focused around the EC11 rotary encoder with push button design used in the majority of current keyboard and macropad designs.
## Enabling EC11 Encoders
To enable encoders for boards that have existing encoder support, uncomment the `EC11_CONFIG=y` and `CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y` lines in your board's .conf file in your `zmk-config/config` folder. Save and push your changes, then download and flash the new firmware.
## Customizing EC11 Encoder Behavior
Encoder behavior in ZMK is configured in two different locations as the push button and rotation behaviors are handled in two separate ways.
### Push Button
Keyboards and macropads with encoder support will typically take the two EC11 pins responsible for the push button and include them as part of the matrix for the keys. To configure what is sent by the push button, find the encoder's position in the keyboard matrix and assign it a behavior the same as you would any other key.
### Rotation
Rotation is handled separately as a type of sensor. The behavior for this is set by defining `sensor-bindings` within a layer but below the `bindings` for the regular keys in the following format:
```
sensor-bindings = <BINDING CW_KEY CCW_KEY>;
```
- `BINDING` is one of two rotation bindings that are currently defined, `&inc_dec_cp` for consumer key presses or `&inc_dec_kp` for normal key presses (see [Key Press](<(/docs/behavior/key-press)>) for the difference between the two).
- `CW_KEY` is the keycode activated by a clockwise turn.
- `CCW_KEY` is the keycode activated by a counter-clockwise turn.
Behaviors for additional encoders can be configured by adding more `BINDING CW_KEY CCW_KEY` sets immediately after the first.
As an example, a complete `sensor-bindings` for a Kyria would look like:
```
sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>;
```
In this example, the left encoder is configured to control volume up and down while the right encoder sends either Page Up or Page Down.