esp-hal/esp32-hal/examples/blinky_erased_pins.rs
Alexander Ananiev 3a456bb9dd
Add type for gpio::AnyPin (#1067)
This makes it possible to safely implement the InputPin and OutputPin
traits for AnyPin. Now you can convert any pin to AnyPin with the
appropriate type and use it in other library modules

Added:
- Peripheral implementation for AnyPin
- Implementation of Pin for AnyPin
- Implementation of OutputPin for AnyPin with type IsOutputPin
- Implementation of InputPin for AnyPin with type IsInputPin
- Upgrade types for AnyPin (for example InputOutputAnalogPinType ->
InputOutputPinType)
- Implementation of From<Gpio> for AnyPin with the appropriate type

Changed:
- The Gpio::degrage method returns AnyPin with the appropriate type
2024-02-08 07:29:30 +00:00

54 lines
1.4 KiB
Rust

//! Blinks three LEDs
//!
//! This assumes that LEDs are connected to GPIO25, 26 and 27.
#![no_std]
#![no_main]
use esp32_hal::{
clock::ClockControl,
gpio::{AnyPin, Input, Output, PullDown, PushPull, IO},
peripherals::Peripherals,
prelude::*,
Delay,
};
use esp_backtrace as _;
#[entry]
fn main() -> ! {
let peripherals = Peripherals::take();
let system = peripherals.SYSTEM.split();
let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
// Set LED GPIOs as an output.
let io = IO::new(peripherals.GPIO, peripherals.IO_MUX);
let led1 = io.pins.gpio25.into_push_pull_output();
let led2 = io.pins.gpio26.into_push_pull_output();
let led3 = io.pins.gpio27.into_push_pull_output();
// Set GPIO9 as an input.
let button = io.pins.gpio0.into_pull_down_input().into();
// You can use `into` or `degrade`
let mut pins = [led1.into(), led2.into(), led3.degrade().into()];
// Initialize the Delay peripheral, and use it to toggle the LED state in a
// loop.
let mut delay = Delay::new(&clocks);
loop {
toggle_pins(&mut pins, &button);
delay.delay_ms(500u32);
}
}
fn toggle_pins(leds: &mut [AnyPin<Output<PushPull>>], button: &AnyPin<Input<PullDown>>) {
for pin in leds.iter_mut() {
pin.toggle().unwrap();
}
if button.is_low().unwrap() {
esp_println::println!("Button");
}
}