hw_timer_t * timer0 = NULL;
hw_timer_t * timer1 = NULL;
portMUX_TYPE timerMux0 = portMUX_INITIALIZER_UNLOCKED;
portMUX_TYPE timerMux1 = portMUX_INITIALIZER_UNLOCKED;
volatile int led1stat = 0;
volatile int led2stat = 0;
int lim_inf = 100;
int lim_sup = 200;
String val_escalado1;
String val_escalado2;
int cont1 = 0;
int cont2 = 0;
void IRAM_ATTR onTimer0(){
portENTER_CRITICAL_ISR(&timerMux0);
led1stat = analogRead(32);
val_escalado1 = escalar(led1stat);
cont2++;
if(cont2>=10){
Serial.println(String("Tiempo: ") + String(millis()));
Serial.println(String("sensor1: ")+String(val_escalado1));
cont2 = 0;
}
if (val_escalado1 == "ALTO" & cont1 <= 5){
digitalWrite(15, HIGH);
//Serial.println(cont1);
cont1++;
}else{
digitalWrite(15, LOW);
cont1 = 0;
}
portEXIT_CRITICAL_ISR(&timerMux0);
}
void IRAM_ATTR onTimer1(){
// Critical Code here
portENTER_CRITICAL_ISR(&timerMux1);
led2stat = analogRead(33);
val_escalado2 = escalar(led2stat);
//Serial.println(String("sensor2: ")+String(val_escalado2));
if (val_escalado2 == "ALTO"){
digitalWrite(2, HIGH);
}else{
digitalWrite(2, LOW);
}
portEXIT_CRITICAL_ISR(&timerMux1);
}
String escalar(int sensor) {
if (sensor < lim_inf) {
return "BAJO"; // Nivel lógico bajo
} else if (sensor >= lim_inf && sensor <= lim_sup) {
return "MEDIO"; // Nivel lógico medio
} else {
return "ALTO"; // Nivel lógico alto
}
}
void setup() {
Serial.begin(115200);
pinMode(2, OUTPUT);
pinMode(15, OUTPUT);
pinMode(32, INPUT);
pinMode(33, INPUT);
analogReadResolution(8);
digitalWrite(2, LOW);
digitalWrite(15, LOW);
Serial.println("start timer 0");
Serial.println(String("Tiempo: "+String(millis())));
timer0 = timerBegin(0, 80, true);
timerAttachInterrupt(timer0, &onTimer0, true);
timerAlarmWrite(timer0, 1000000, true);
Serial.println("start timer 1");
timer1 = timerBegin(1, 80, true);
timerAttachInterrupt(timer1, &onTimer1, true);
timerAlarmWrite(timer1, 2500000, true);
timerAlarmEnable(timer0);
timerAlarmEnable(timer1);
}
void loop() {
vTaskDelay(portMAX_DELAY);
}