#include "driver/ledc.h" #include "pins.h" #define LEDC_TIMER LEDC_TIMER_0 #define LEDC_MODE LEDC_LOW_SPEED_MODE #define LEDC_CHANNEL LEDC_CHANNEL_0 #define LEDC_DUTY_RES LEDC_TIMER_8_BIT void ir_pwm_init() { ledc_timer_config_t timer = { .speed_mode = LEDC_MODE, .timer_num = LEDC_TIMER, .duty_resolution = LEDC_DUTY_RES, .freq_hz = 38000, .clk_cfg = LEDC_AUTO_CLK }; ledc_timer_config(&timer); ledc_channel_config_t channel = { .speed_mode = LEDC_MODE, .channel = LEDC_CHANNEL, .timer_sel = LEDC_TIMER, .gpio_num = IR_LED, .duty = 0, .hpoint = 0 }; ledc_channel_config(&channel); } void ir_carrier_on() { // ~50% duty cycle (strong IR signal) ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, 128); ledc_update_duty(LEDC_MODE, LEDC_CHANNEL); } void ir_carrier_off() { ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, 0); ledc_update_duty(LEDC_MODE, LEDC_CHANNEL); }