ESP IDF Servo Library

Introduction

This crate is a simple wrapper over the esp-idf-sys bindings to make servo control easier using the LEDC module.

Basic Usage

Create a basic Servo Configuration - this one specific for the SG90 series of servo motors.

``` let peripherals = Peripherals::take().unwrap();

let servocfg = ServoConfig { // below are servo specific configurations maxangle: 180, minwidthus: 500, maxwidthus: 2500, frequency: 50,

// choose your timer: see https://esp-rs.github.io/esp-idf-sys/esp_idf_sys/?search=ledc_timer_t_LEDC_TIMER_0
timer_number: 0,

// whichever pin the servo is attached to
pin: 5,

// the channel number: see https://esp-rs.github.io/esp-idf-sys/esp_idf_sys/type.ledc_channel_t.html
channel: 0,

// the speed mode: see https://esp-rs.github.io/esp-idf-sys/esp_idf_sys/constant.ledc_mode_t_LEDC_LOW_SPEED_MODE.html
speed_mode: 0,

}; ```

Initialize the servo:

let servo = Servo::init(servo_cfg);

Change the angle of the servo within your program:

``` loop { for i in 0..180 {

    servo.write_angle((i as f64));

    FreeRtos::delay_ms(20);

    println!("Angle: {}", servo.read_angle());
}

for i in (0..180).rev() {

    servo.write_angle((i as f64));

    FreeRtos::delay_ms(20);

    println!("Angle: {}", servo.read_angle());
}

} ```