Skip to content

Latest commit

 

History

History
55 lines (43 loc) · 1.51 KB

README.md

File metadata and controls

55 lines (43 loc) · 1.51 KB

RotaryButton

Event-oriented button class.

source

Made with this in mind

Offers events for a rotary encoder to help you structure responsive code.

Example program

This blinks an LED in response to any input on an Adafruit rotary encoder.

def _get_hardware():
    encoder = rotaryio.IncrementalEncoder(board.A4, board.A5)
    pin = digitalio.DigitalInOut(board.D5)
    pin.direction = digitalio.Direction.INPUT
    pin.pull = digitalio.Pull.UP
    button = Debouncer(pin)

    led = digitalio.DigitalInOut(D2)
    led.direction = digitalio.Direction.OUTPUT

    return button, encoder, led

def _toggle(pin):
    pin.value = not pin.value

def run():
    # ----------------------------------------------
    # Set up hardware
    button, encoder, led = _get_hardware()
    toggle_led = lambda: _toggle(led)
    def toggle_led_times(amount):
        for i in range(abs(amount)):
            toggle_led()

    # ----------------------------------------------
    # Configure events for the program.
    rotarybutton = RotaryButton(
        rotary, button,
        on_increment:        [toggle_led_times],
        on_click:            [toggle_led],
        on_longhold_hold:    [toggle_led],
        on_longhold_release: [toggle_led]
    )

    # ----------------------------------------------
    # Run program forever waiting for input.
    while True:
        rotarybutton.loop()

if __name__ == '__main__':
    run()