#include <Arduino.h>
#include "driver/ledc.h"
const int servoMotorPin = 13;
const int btn1Pin = 2;
const int btn2Pin = 4;
volatile bool btn1Pressed = false;
volatile bool btn2Pressed = false;
volatile int ciclo = 80;
void IRAM_ATTR ISR_btn1() {
btn1Pressed = true;
}
void IRAM_ATTR ISR_btn2() {
btn2Pressed = true;
}
ledc_channel_config_t channel_config;
void setup() {
pinMode(btn1Pin, INPUT_PULLUP);
pinMode(btn2Pin, INPUT_PULLUP);
// Configuración del canal PWM para controlar el servomotor
channel_config.gpio_num = servoMotorPin;
channel_config.speed_mode = LEDC_HIGH_SPEED_MODE;
channel_config.channel = LEDC_CHANNEL_0;
channel_config.intr_type = LEDC_INTR_DISABLE;
channel_config.timer_sel = LEDC_TIMER_0;
channel_config.duty = ciclo;
ledc_channel_config(&channel_config);
// Configuración del timer PWM
ledc_timer_config_t timer_config;
timer_config.speed_mode = LEDC_HIGH_SPEED_MODE;
timer_config.duty_resolution = LEDC_TIMER_10_BIT;
timer_config.timer_num = LEDC_TIMER_0;
timer_config.freq_hz = 50;
ledc_timer_config(&timer_config);
attachInterrupt(digitalPinToInterrupt(btn1Pin), ISR_btn1, FALLING);
attachInterrupt(digitalPinToInterrupt(btn2Pin), ISR_btn2, FALLING);
}
void loop() {
if (btn1Pressed) {
if (ciclo < 150) {
ciclo += 10;
}
btn1Pressed = false;
}
if (btn2Pressed) {
if (ciclo > 30) {
ciclo -= 10;
}
btn2Pressed = false;
}
ledcWrite(LEDC_CHANNEL_0, ciclo);
delay(100);
}