#define LED 12 //LED Digital pin
#define SLIDE 13 // Potentiometer Digital pin
#define PERIOD 100 //PWM Period in us
volatile int pwm_value = 0; //Duty Cycle Time
hw_timer_t *My_timer = NULL;
void IRAM_ATTR onTimer(){
bool led_status = digitalRead(LED);
if(led_status && pwm_value!=PERIOD){
digitalWrite(LED,!led_status);
timerWrite(My_timer, pwm_value);
}
else if(!led_status && pwm_value!=0){
digitalWrite(LED,!led_status);
timerWrite(My_timer, PERIOD-pwm_value);
}
Serial.println("Hello, ESP32!");
}
void setup() {
//Serial.begin(115200);
pinMode(LED, OUTPUT);
pinMode(SLIDE, INPUT);
//Timer initializer
My_timer = timerBegin(0, 80, true);
//0: hw timer number (ESP32 has 3hw timers available)
//80: time divider. ESP32 clk 80MHz so we set every tick to 1 us
//true: counter shoud increment
//Attach Interrupt
timerAttachInterrupt(My_timer, &onTimer, true);
timerAlarmWrite(My_timer, PERIOD, true);
//PERIOD: number of microseconds after which the interrupt should occur
//true: timer counter will reload after interrupt
timerAlarmEnable(My_timer); //Enable
}
void loop() {
pwm_value= map(analogRead(SLIDE), 0, 4095, 0, PERIOD);
//Serial.println(analogRead(SLIDE));
}