#include <Arduino.h>
#include "driver/adc.h"
#include "driver/ledc.h"
#define led1 21
#define led2 5
#define input1 ADC1_CHANNEL_6 // GPIO34
#define input2 ADC1_CHANNEL_7 // GPIO35
void setup() {
Serial.begin(115200);
// ADC
adc1_config_width(ADC_WIDTH_BIT_12);
adc1_config_channel_atten(input1, ADC_ATTEN_DB_11);
adc1_config_channel_atten(input2, ADC_ATTEN_DB_11);
// PWM Timer
ledc_timer_config_t ledc_timer = {
.speed_mode = LEDC_LOW_SPEED_MODE,
.duty_resolution = LEDC_TIMER_8_BIT,
.timer_num = LEDC_TIMER_0,
.freq_hz = 5000,
.clk_cfg = LEDC_AUTO_CLK
};
ledc_timer_config(&ledc_timer);
// PWM Channel LED1
ledc_channel_config_t ch1 = {
.gpio_num = led1,
.speed_mode = LEDC_LOW_SPEED_MODE,
.channel = LEDC_CHANNEL_0,
.timer_sel = LEDC_TIMER_0,
.duty = 0,
.hpoint = 0
};
ledc_channel_config(&ch1);
// PWM Channel LED2
ledc_channel_config_t ch2 = {
.gpio_num = led2,
.speed_mode = LEDC_LOW_SPEED_MODE,
.channel = LEDC_CHANNEL_1,
.timer_sel = LEDC_TIMER_0,
.duty = 0,
.hpoint = 0
};
ledc_channel_config(&ch2);
Serial.println("ESP32 Ready");
}
void loop() {
int val1 = adc1_get_raw(input1);
int val2 = adc1_get_raw(input2);
int pwm1 = val1 * 255 / 4095;
int pwm2 = val2 * 255 / 4095;
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, pwm1);
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_1, pwm2);
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_1);
Serial.printf("ADC1=%d PWM1=%d | ADC2=%d PWM2=%d\n",
val1, pwm1, val2, pwm2);
delay(100);
}