Skip to main content

Debouncer supporting multi-button and multi-press gestures.

Project description

Introduction

Responds to complicated button presses across multiple buttons and repeated button presses. Given a set of buttons, presses can be recognized as belonging to any of those buttons, or to any subset of those buttons. Distinguishes between short presses and long presses, which may be combined in any order. Also recognizes an extra-long press, which may not be followed by additional presses.

Builds upon Adafruit's excellent adafruit_debouncer library to provide an alternative to that library's Button class.

Dependencies

This package depends on:

  • Adafruit-CircuitPython-Debouncer
  • Adafruit-Blinka

Usage Example

import time
import board  # provided by Adafruit-Blinka
from multibutton_debouncer import MultiButton

keep_on_ticking = True
def stop_ticking():
    nonlocal keep_on_ticking
    keep_on_ticking = False

buttons = MultiButton(board.D18, board.D5)

# a short press
buttons.set_callback([board.D18], ".", lambda: print("boop"))
buttons.set_callback([board.D5], ".", lambda: print("beep"))

# a long press
buttons.set_callback([board.D18], "_", lambda: print("boooop"))
buttons.set_callback([board.D5], "_", lambda: print("beeeep"))

# repeated presses
buttons.set_callback([board.D18], "...___...", lambda: print("SOS"))  repea

# repeated presses across multiple buttons
buttons.set_callback([board.D18, board.D5], "_..__", lambda: print("Two Bits!"))

# an extra-long press across multiple buttons
buttons.set_callback([board.D18, board.D5], "~", stop_ticking)

while keep_on_ticking:
    time.sleep(1/60)

    # `poll()` MUST be called frequently to update state
    # (this will be familiar to users of Adafruit-Debouncer)
    buttons.poll()

Updates and Feedback

The documentation is pretty limited. That'll be fixed presently, but until then, you may wish to look at the public methods of MultiButton as well as the Press enumeration.

This is my first contribution to the Python ecosystem. I will be grateful for any feedback you may have.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

multibutton-debouncer-0.0.1.tar.gz (5.8 kB view hashes)

Uploaded Source

Built Distribution

multibutton_debouncer-0.0.1-py3-none-any.whl (6.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page