A batteries-included [embedded-hal] [InputPin
] debouncer.
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()?;
}
API docs are hosted on docs.rs:
[API Documentation]
This crate makes use of trait bounds on a const fn
, which
requires Rust 1.61.
There are at least three debouncing crates targeting embedded Rust development. How does this one compare to the others?
unflappable
InputPin
: Yesu8
debounced-pin
]
InputPin
: Yesu8
+ enum
debouncr
]
InputPin
: Nou8
debouncing
]
InputPin
: Nou8
+ dynamically-allocated Vec
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.