esp-idf-hal/examples/ledc_fade.rs
ivmarkov 2af4695aac
Remove Peripheral/PeripheralRef (#529)
* Remove Peripheral/PeripheralRef

* Make ADC unit and channel structs more readable by avoiding const generics

* Remove unused parameter

* fix forgotten reference to the old ADCU syntax

* Mention that we have removed the prelude module

* try_into methods for changing the pin type
2025-09-03 14:13:32 +03:00

56 lines
1.4 KiB
Rust

#![allow(unexpected_cfgs)]
use std::time::Duration;
use esp_idf_hal::delay::FreeRtos;
use esp_idf_hal::ledc::{config::TimerConfig, LedcDriver, LedcTimerDriver};
use esp_idf_hal::peripherals::Peripherals;
use esp_idf_hal::units::*;
fn main() -> anyhow::Result<()> {
esp_idf_hal::sys::link_patches();
let peripherals = Peripherals::take()?;
let timer_driver = LedcTimerDriver::new(
peripherals.ledc.timer0,
&TimerConfig::default().frequency(25.kHz().into()),
)?;
let mut ledc_driver = LedcDriver::new(
peripherals.ledc.channel0,
timer_driver,
peripherals.pins.gpio7,
)?;
for _ in 0..2 {
// Fade up over 2 seconds
ledc_driver.fade_with_time(
ledc_driver.get_max_duty(),
Duration::from_secs(2).as_millis() as i32,
true,
)?;
// Fade down over 2 seconds
ledc_driver.fade_with_time(0, Duration::from_secs(2).as_millis() as i32, true)?;
}
#[cfg(not(any(esp32, esp_idf_version_major = "4")))]
{
// Fade up over 2 seconds, but abort after 1
ledc_driver.fade_with_time(
ledc_driver.get_max_duty(),
Duration::from_secs(2).as_millis() as i32,
false,
)?;
FreeRtos::delay_ms(1000);
// Fade will stop halfway
ledc_driver.fade_stop()?;
}
ledc_driver.set_duty(ledc_driver.get_max_duty() / 10)?;
FreeRtos::delay_ms(10000);
Ok(())
}