pub struct ButtonEsp<'d> { /* private fields */ }Expand description
A device abstraction for a button with debouncing and press duration detection.
§Hardware Requirements
The button can be wired in two ways:
PressedTo::Voltage: Button connects pin to 3.3V when pressed (uses pull-down)PressedTo::Ground: Button connects pin to GND when pressed (uses pull-up)
§Usage
Use Button::wait_for_press when you only need a debounced
press event. It returns on the down edge and does not wait for release.
Use Button::wait_for_press_duration when you need to
distinguish short vs. long presses. It returns as soon as it can decide, so long
presses are reported before the button is released.
§Example
use device_envoy_esp::{
button::{Button as _, ButtonEsp, PressDuration, PressedTo},
init_and_start, Result,
};
async fn example() -> Result<Infallible> {
init_and_start!(p);
let mut button = ButtonEsp::new(p.GPIO6, PressedTo::Ground);
// Wait for a press without measuring duration.
button.wait_for_press().await;
// Measure press durations in a loop
loop {
match button.wait_for_press_duration().await {
PressDuration::Short => {
// Handle short press
}
PressDuration::Long => {
// Handle long press (fires before button is released)
}
}
}
}Implementations§
Source§impl<'d> ButtonEsp<'d>
impl<'d> ButtonEsp<'d>
Sourcepub fn new(button_pin: impl InputPin + 'd, pressed_to: PressedTo) -> Self
pub fn new(button_pin: impl InputPin + 'd, pressed_to: PressedTo) -> Self
Creates a new ButtonEsp instance from a pin.
The pin is configured based on the connection type:
PressedTo::Voltage: Uses internal pull-down (button to 3.3V)PressedTo::Ground: Uses internal pull-up (button to GND)
Trait Implementations§
Source§impl Button for ButtonEsp<'_>
Available on target_os=none only.
impl Button for ButtonEsp<'_>
Available on
target_os=none only.Source§fn is_pressed(&self) -> bool
fn is_pressed(&self) -> bool
Returns whether the button is currently pressed.
Source§async fn wait_for_press(&mut self)
async fn wait_for_press(&mut self)
Waits for the next press (button goes down, debounced). Does not wait for release. Read more
Source§async fn wait_for_press_duration(&mut self) -> PressDuration
async fn wait_for_press_duration(&mut self) -> PressDuration
Waits for the next press and returns whether it was short or long (debounced). Read more
Auto Trait Implementations§
impl<'d> Freeze for ButtonEsp<'d>
impl<'d> RefUnwindSafe for ButtonEsp<'d>
impl<'d> Send for ButtonEsp<'d>
impl<'d> Sync for ButtonEsp<'d>
impl<'d> Unpin for ButtonEsp<'d>
impl<'d> UnsafeUnpin for ButtonEsp<'d>
impl<'d> !UnwindSafe for ButtonEsp<'d>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Casts the value.
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> StrictAs for T
impl<T> StrictAs for T
Source§fn strict_as<Dst>(self) -> Dstwhere
T: StrictCast<Dst>,
fn strict_as<Dst>(self) -> Dstwhere
T: StrictCast<Dst>,
Casts the value.
Source§impl<Src, Dst> StrictCastFrom<Src> for Dstwhere
Src: StrictCast<Dst>,
impl<Src, Dst> StrictCastFrom<Src> for Dstwhere
Src: StrictCast<Dst>,
Source§fn strict_cast_from(src: Src) -> Dst
fn strict_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
Source§fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
Source§fn unwrapped_cast_from(src: Src) -> Dst
fn unwrapped_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> WrappingAs for T
impl<T> WrappingAs for T
Source§fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
Source§fn wrapping_cast_from(src: Src) -> Dst
fn wrapping_cast_from(src: Src) -> Dst
Casts the value.