#include "driver/ledc.h" #include "defines.h" void init_servo_PWM(void) { ledc_timer_config_t ledc_timer = { .speed_mode = LEDC_LOW_SPEED_MODE, .timer_num = LEDC_TIMER_0, .duty_resolution = LEDC_TIMER_16_BIT, .freq_hz = 50, .clk_cfg = LEDC_AUTO_CLK }; ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer)); ledc_channel_config_t ledc_channel = { .speed_mode = LEDC_LOW_SPEED_MODE, .channel = LEDC_CHANNEL_0, .timer_sel = LEDC_TIMER_0, .intr_type = LEDC_INTR_DISABLE, .gpio_num = 0, // Using pin D0 for servo. .duty = offSpeed, // Start off .hpoint = 0 }; ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel)); } void set_servo_speed(int channel, uint32_t duty) { // duty input should be between 0 and 65535 ledc_set_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)channel, duty); ledc_update_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)channel); }