unflappable

A batteries-included [embedded-hal] [InputPin] debouncer.

Quickstart

Add the following to your Cargo.toml:

toml [dependencies] unflappable = "0.2"

Create an uninitialized [Debouncer] in static storage.

rust use unflappable::{debouncer_uninit, Debouncer, default::ActiveLow}; static DEBOUNCER: Debouncer<PinType, ActiveLow> = debouncer_uninit!();

Initialize the Debouncer with your input pin, returning the [Debounced] pin. Use this pin just as you would any other [InputPin], such as passing ownership to another abstraction.

rust let debounced_pin = unsafe { DEBOUNCER.init(input_pin) }?;

Regularly poll the Debouncer, perhaps in an interrupt service routine.

rust unsafe { DEBOUNCER.poll()?; }

Documentation

API Docs

API docs are hosted on docs.rs:

[API Documentation]

Minimum Supported Rust Version

This crate makes use of trait bounds on a const fn, which requires Rust 1.61.

Comparison to other debounce crates

There are at least three debouncing crates targeting embedded Rust development. How does this one compare to the others?

Contributing

I'm happy to see any and all contributions, including bug reports, usability suggestions, patches, or angry yet well-intentioned rants. You are encouraged to report issues to the official [issue tracker] and send any questions or patches to the [mailing list]. Pull requests to the GitHub mirror are also acceptable.