pub trait Pin: Sealed {
// Required method
fn number(&self) -> u8;
// Provided method
fn degrade<'d>(self) -> AnyPin<'d>
where Self: Sized + 'd { ... }
}
Expand description
Common trait implemented by pins
Required Methods§
Provided Methods§
Sourcefn degrade<'d>(self) -> AnyPin<'d>where
Self: Sized + 'd,
fn degrade<'d>(self) -> AnyPin<'d>where
Self: Sized + 'd,
Type-erase this pin into an AnyPin
.
This function converts pin singletons (GPIO0<'_>
, …), which are all
different types, into the same type. It is useful for creating
arrays of pins, or avoiding generics.
§Example
use esp_hal::gpio::{AnyPin, Pin, Output, OutputConfig, Level};
use esp_hal::delay::Delay;
fn toggle_pins(pins: [AnyPin; 2], delay: &mut Delay) {
let [red, blue] = pins;
let mut red = Output::new(
red,
Level::High,
OutputConfig::default(),
);
let mut blue = Output::new(
blue,
Level::Low,
OutputConfig::default(),
);
loop {
red.toggle();
blue.toggle();
delay.delay_millis(500);
}
}
let pins: [AnyPin; 2] = [
peripherals.GPIO5.degrade(),
peripherals.GPIO6.degrade(),
];
let mut delay = Delay::new();
toggle_pins(pins, &mut delay);