esp-idf-hal/examples/ledc_fade.rs
Andrew Kovaliov 26a598e21b
ledc: add fade stop (#525)
* ledc: add fade stop

* ledc: fix fade stop

* ledc: fix fade stop

* ledc: fix fade stop example
2025-04-05 09:36:20 +02:00

55 lines
1.4 KiB
Rust

#![allow(unexpected_cfgs)]
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::prelude::*;
use std::time::Duration;
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(())
}