#embedded-hal #no-std #debounce

nightly no-std unflappable

A batteries-included embedded-hal InputPin debouncer

1 unstable release

0.1.0 Aug 12, 2020

#4 in #debounce

MIT license

37KB
392 lines

unflappable

A batteries-included embedded-hal InputPin debouncer.

Quickstart

Add the following to your Cargo.toml:

[dependencies]
unflappable = "0.1"

Create an uninitialized Debouncer in static storage.

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.

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

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

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 is currently unstable. Therefore, we require use of the nightly compiler. When rust-lang/rust#67792 stabilizes, we will establish a MSRV policy.

Comparison to other debounce crates

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

Crate: unflappable Wraps InputPin: Yes Can move wrapped pin: Yes Algorithm: Integration-based by Kuhn State overhead: u8

Crate: debounced-pin Wraps InputPin: Yes Can move wrapped pin: No Algorithm: Differentiation-based by Greensted State overhead: u8 + enum

Crate: debouncr Wraps InputPin: No Can move wrapped pin: N/A Algorithm: Differentiation-based by Ganssle State overhead: u8

Crate: debouncing Wraps InputPin: No Can move wrapped pin: N/A Algorithm: Differentiation-based by Hackaday State overhead: u8 + dynamically-allocated Vec

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.

Dependencies

~82KB