kmk_firmware/docs/encoder.md
Athul Cyriac Ajay e821acfca1
chore: Minor Fixes to Encoder Docs
- Updated code to add an import and close a list element
- Add Link to Keyboard main.py
- Minor Additions to Docs and Typo fixes
2021-09-16 17:18:31 +05:30

2.3 KiB

Encoder

Add twist control to your keyboard! Volume, zoom, anything you want.

Enabling the extension

The constructor(EncoderHandler class) takes a minimum of 3 arguments: a list of pad_a pins, a list of pad_b pins, and an encoder_map. The encoder_map is modeled after the keymap and works the same way. It should have as many layers as your keymap, and use KC.NO keys for layers that you don't require any action. The encoder supports a velocity mode if you desire to make something for video or sound editing. The direction of increment/decrement can be changed to make sense for the direction the knob is turning by setting the is_inverted flag.

Configuration

There is a complete example in the Atreus62 main.py

Create the encoder_map.

Anatomy of an encoder_map tuple: (increment_key, decrement_key, keys presses per encoder click)
encoder_map is a Nested List with a Tuple as the list element (List[List[Tuple(Key,Key,Int)]])

from kmk.modules.encoder import EncoderHandler # import the Encoder module

Zoom_in = KC.LCTRL(KC.EQUAL)
Zoom_out = KC.LCTRL(KC.MINUS)

# create the encoder map, modeled after the keymap
encoder_map = [
    [
        # Only 1 encoder is being used, so only one tuple per layer is required
        # Increment key is volume up, decrement key is volume down, and sends 2 
        # key presses for every "click" felt while turning the encoder.
        (KC.VOLU,KC.VOLD,2),
    ],
    [
        # only one key press sent per encoder click
        (Zoom_in, Zoom_out,1),
    ],
    [
        # No action keys sent here, the resolution is a dummy number, to be 
        # removed in the future.
        (_______,_______,1),#
    ]
]

# create the encoder instance, and pass in a list of pad_a pins, a list of pad_b 
# pins, and the encoder map created above
encoder_ext = EncoderHandler([board.D40],[board.D41], encoder_map)

# if desired, you can flip the incrfement/decrement direction of the knob by
# setting the is_inerted flag to True.  If you turn the knob to the right and 
# the volume goes down, setting this flag will make it go up.  It's default
# setting is False
encoder_ext.encoders[0].is_inverted = True

# Make sure to add the encoder_ext to the modules list
keyboard.modules = [encoder_ext]