use esp_idf_hal::delay::FreeRtos;
use esp_idf_hal::ledc::*;
use esp_idf_hal::peripherals::Peripherals;
use esp_idf_hal::prelude::*;

fn main() -> anyhow::Result<()> {
    let peripherals = Peripherals::take().unwrap();

    let mut channel = LedcDriver::new(
        peripherals.ledc.channel0,
        LedcTimerDriver::new(
            peripherals.ledc.timer0,
            &config::TimerConfig::new().resolution(Resolution::Bits10).frequency(50.Hz().into())
        )?,
        peripherals.pins.gpio3
    )?;

    let mut duty = 75;

    loop {
        while duty < 120 {
            channel.set_duty(duty)?;
            FreeRtos::delay_ms(15);
            duty += 1;
        }

        while duty > 30 {
            channel.set_duty(duty)?;
            FreeRtos::delay_ms(15);
            duty -= 1;
        }
    }
}
$abcdeabcde151015202530fghijfghij