Mas alla de tu resolución, qué prohibe poner dos termistores y dos controles?
Proteger los LEDs es mas importante que esperar a que se queme el que no esperas que lo haga!!
Yo no dudaría. Te sobran pines, te sobra capacidad de cálculo del arduino.
Porque no gastar algo mas y usar otro termistor?
En 6 if que no estan anidados (dentro de un while) siempre vuelves a hacer la conversión analogRead(termistor) para qué? lo mismo con digitalRead(relay)!
En su lugar, lo haces al comienzo, cargas su valor en una variable y es lo mismo.
Nada va a cambiar tan rápido a nivel termino en esos microsegundos de código y en algo que vigilas a lo largo de 1.5 minutos!!
No se si funcionará pero debería
bool brelay = digitalRead(relay);
unsigned int itermistor = analogRead(termistor);;
//Si los led están encendidos y el termistor esta por debajo de 630
if (!brelay) {
if (itermistor < 630) {
if (flag_millis == false) {
cap_millis = millis(); // Capturo el tiempo en el que se encendieron los leds
flag_millis = true;
}
// Acá hago lo mismo pero le sumo 1.5 minutos al tiempo que capture antes y lo comparo con millis()
if (millis() > (cap_millis + 90000)) {
pwmWrite(PWM_fan_leds, 255); //Si pasados 1.5 minutos el termistor sigue estando por debajo de 630 enciendo los coolers
}
}
if (itermistor >= 620) {
if (itermistor>= 730) { // Condiciono la lectura maxima del termistor
termistor_val= 730;
}
if (itermistor <= 350) { // Condiciono la lectura minima del termistor
termistor_val = 350;
}
termistor_val = map(itermistor, 350, 730, 180, 255);
pwmWrite(PWM_fan_leds, termistor_val);
porcentaje_fan_leds = map(termistor_val, 180, 255, 0, 100);
}
}
else { // Si los Leds estan apagados
flag_millis = false;
if ((itermistor <= 610)) { // Si los Leds están apagados
pwmWrite(PWM_fan_leds, 0);
porcentaje_fan_leds = 0;
}
}