Skip to main content

Led

Struct Led 

Source
pub struct Led<'a>(/* private fields */);
Available on target_os=none only.
Expand description

A device abstraction for a single digital LED with animation support.

§Hardware Requirements

This device requires a single GPIO pin connected to an LED. The LED can be wired for either active-high (default) or active-low operation. The device supports both polarities and controls the pin internally.

Active-high wiring (default): LED anode (long leg) → 220Ω resistor → GPIO pin, LED cathode (short leg) → GND Active-low wiring: LED anode (long leg) → 3.3V, LED cathode (short leg) → 220Ω resistor → GPIO pin

§Example

use device_envoy::{Result, led::{Led, LedStatic, OnLevel}};
use embassy_time::Duration;
use embassy_rp::gpio::Level;

async fn example(p: embassy_rp::Peripherals, spawner: embassy_executor::Spawner) -> Result<()> {
    static LED_STATIC: LedStatic = Led::new_static();
    let led = Led::new(&LED_STATIC, p.PIN_1, OnLevel::High, spawner)?;

    // Turn the LED on
    led.set_level(Level::High);
    embassy_time::Timer::after(Duration::from_secs(1)).await;

    // Turn the LED off
    led.set_level(Level::Low);
    embassy_time::Timer::after(Duration::from_millis(500)).await;

    // Play a blinking animation (looping: 200ms on, 200ms off)
    led.animate(&[(Level::High, Duration::from_millis(200)), (Level::Low, Duration::from_millis(200))]);

    core::future::pending().await // run forever
}

The device runs a background task that handles state transitions and animations. Create the device once with Led::new and use the returned handle for all updates.

Implementations§

Source§

impl Led<'_>

Source

pub fn new<P: Pin>( led_static: &'static LedStatic, pin: Peri<'static, P>, on_level: OnLevel, spawner: Spawner, ) -> Result<Self>

Creates a single LED device and spawns its background task; see Led docs.

Source

pub const fn new_static() -> LedStatic

Creates static resources for Led::new; see Led docs.

Source

pub fn set_level(&self, level: Level)

Set the LED level immediately, replacing any running animation.

See Led struct example for usage.

Source

pub fn animate<I>(&self, frames: I)

Play a looped animation sequence of LED levels with durations.

Accepts any iterator yielding (Level, Duration) pairs or references, up to 32 frames. The animation will loop continuously until replaced by another command. See Led struct example for usage.

Auto Trait Implementations§

§

impl<'a> Freeze for Led<'a>

§

impl<'a> !RefUnwindSafe for Led<'a>

§

impl<'a> Send for Led<'a>

§

impl<'a> Sync for Led<'a>

§

impl<'a> Unpin for Led<'a>

§

impl<'a> !UnwindSafe for Led<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> StrictAs for T

Source§

fn strict_as<Dst>(self) -> Dst
where T: StrictCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> StrictCastFrom<Src> for Dst
where Src: StrictCast<Dst>,

Source§

fn strict_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.