#include "PWMChannel.hpp" #include "driver/gpio.h" #include "driver/ledc.h" CyanLight::PWMChannel::PWMChannel(uint8_t channel, uint8_t gpio) : channel{(ledc_channel_t)channel} { gpio_config_t conf; conf.intr_type = GPIO_INTR_DISABLE; conf.mode = GPIO_MODE_OUTPUT; conf.pin_bit_mask = 1ULL << gpio; conf.pull_up_en = GPIO_PULLUP_DISABLE; conf.pull_down_en = GPIO_PULLDOWN_DISABLE; gpio_config(&conf); gpio_set_level((gpio_num_t)gpio, 0); ledc_channel_config_t ledc_channel; ledc_channel.channel = this->channel; ledc_channel.duty = 0; ledc_channel.gpio_num = (gpio_num_t)gpio; ledc_channel.speed_mode = LEDC_HIGH_SPEED_MODE; ledc_channel.hpoint = 0; ledc_channel.timer_sel = LEDC_TIMER_0; ledc_channel.intr_type = LEDC_INTR_DISABLE; ledc_channel_config(&ledc_channel); setPWM(0); } void CyanLight::PWMChannel::setPWM(uint32_t pwm) { ledc_set_duty(LEDC_HIGH_SPEED_MODE, this->channel, pwm); ledc_update_duty(LEDC_HIGH_SPEED_MODE, this->channel); this->pwm = pwm; } uint32_t CyanLight::PWMChannel::getPWM() { return this->pwm; }