En la version 2.x (gestor de placa de esp32 de espressif systems) la configuración de los timers por ejemplo "timer = timerBegin(1,80,true);" te permite elegir el timer en este caso timer1 pero en la version 3.x solo se ingresa la frecuencia ejemplo "timer = timerBegin(1000000);" entonces al querer parar el timer si me eligió automáticamente el timer usado por freeRTOS al detener el timer se detiene todo (o eso interpreto que esta pasando). ¿como se supone que puedo elija el timer que yo quiero? si quiero usar x timer para el uso que yo quiera darle ¿como lo selecciono ahora en la version 3.x ??
Pongo una simplificación del código donde se maneja solo el timer , en este caso es para el gestor de placas V2.X donde si configuro el timer 0 obtengo el mismo problema que el codigo adaptado para la V3.X pero como en la V2.X puedo elegir el timer al ingresar otro timer se puede ver solo la impresión de "andando" cuando esta desactivado el timer y "andando" con "entro" cuando esta activado el timer (algo que con el timer 0 si se para también se para toda la ejecución es decir no se imprime nada).
TaskHandle_t Tarea0;
hw_timer_t *timer = NULL; // Declaración de la variable timer
bool estado_dimmer = true;
bool flag = false;
void IRAM_ATTR reloj() {
flag = true;
}
void d_on_off(bool on_off) {
if (on_off){
if(estado_dimmer == false){
Serial.println("todo activado");
timerStart(timer);
estado_dimmer = true;
}
else{
Serial.println("ya esta todo activado");
}
}
else{
if(estado_dimmer == true){
Serial.println("todo desactivado");
timerStop(timer);
estado_dimmer = false;
}
else{
Serial.println("ya esta todo desactivado");
}
}
}
void setup() {
timer = timerBegin(2,80,true);//timer = timerBegin(1000000);
timerAttachInterrupt(timer, &reloj ,true);
timerAlarmWrite(timer, 2000000, true);
timerAlarmEnable(timer);
xTaskCreatePinnedToCore(loop0,"Tarea_0",1000,NULL,1,&Tarea0,1); // Core 1
Serial.begin(115200);
}
void loop() {
}
void loop0(void *parameter){
while(1==1){
Serial.println("andando");
if(flag){
Serial.println("entro");
flag=false;
}
int valorIngresado;
if (Serial.available() ) {
valorIngresado = Serial.parseInt();
if(valorIngresado == 300){
d_on_off(true);
}
else if(valorIngresado == 400){
d_on_off(false);
}else {
Serial.println("Ingresar el valor 300 o 400.");
}
while (Serial.available() ) {
Serial.read(); // Limpia el búfer de entrada
}
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}