Pues estoy terminando un programa (para mí bastante largo, el mayor que he hecho hasta ahora) para control de una pantalla de leds para la iluminación de un acuario, con un pequeño display TFT de 2,5 pulgadas, imita los amaneceres, anocheceres, luz nocturna, control de dos alimentadores automáticos, y acabo de programar tres sensores de temperatura, temperatura ambiente, temperatura del agua (y para activar el calentador interno del acuario) y la temperatura de la pantalla de los leds de alta potencia para mantenerla por debajo de los 40 grados activando un grupo de ventiladores.
Todos los procesos están dentro de condicionales con millis para no detener el procesador, y hasta la implementación de los sensores de temperatura todo había llegado a funcionar bien.
Pero a partir del registro de temperaturas, el reloj digital que se dibuja en el display se ha "entorpecido" al mostrar los segundos, algunos se retrasan, otros se adelantan. No es problema del RTC, la hora y los minutos no se adelantan ni retrasan, además si comento simplemente la línea donde se llama al comando para obtener las temperaturas, el problema desaparece.
He comentado todas las salidas al puerto serie para ver si mejoraba el asunto, pero sigue igual.
Pongo básicamente el programa de registro de temperaturas:
void ControlTemperaturas() //Temperatura del ambiente, apantalla de leds y del Agua
{
unsigned long MillisPrevias;
if (contador) //Para que lo registre una sola vez
{
MillisPrevias = millis();
contador = false;
}
if ((millis() - MillisPrevias) >= 500)//Cada medio segundo (He probado diferentes tiempos)
{
MillisPrevias = millis();
sensors.requestTemperatures(); //Comando para obtener las temperaturas ESTE ES EL QUE ENLENTECE
float TAmbiente= sensors.getTempC(DirAmbiental);//Se obtiene la temperatura en °C del sensor ambiental
float TPantalla= sensors.getTempC(DirPantalla); //Se obtiene la temperatura en °C del sensor de la pantalla
float TAgua = sensors.getTempC(DirAgua); //Se obtiene la temperatura en °C del sensor del agua
if (TPantalla > 59.00)
{
analogWrite(Buzzer, 255);
}
else if (TAgua > 29.99 || TAgua <15.00)
{
analogWrite(Buzzer, 255);
}
else
{
analogWrite(Buzzer, 0);
}
//Dibuja las temperaturas en el display TFT:
tft.setTextSize(2);
if (TAmbiente > 29.99) {tft.setTextColor(ROJO, NEGRO);} else {tft.setTextColor(VERDE, NEGRO);}
tft.setCursor(293,38); tft.print(TAmbiente);
if (TAgua > 26.99) {tft.setTextColor(ROJO, NEGRO);} else {tft.setTextColor(VERDE, NEGRO);}
tft.setCursor(293,67); tft.print(TAgua);
if (TPantalla > 49.99) {tft.setTextColor(ROJO, NEGRO);} else {tft.setTextColor(VERDE, NEGRO);}
tft.setCursor(293,96); tft.print(TPantalla);
tft.setTextColor(AMARILLO, NEGRO);
tft.setCursor(370,38); tft.print("Grados");
tft.setCursor(370,67); tft.print("Grados");
tft.setCursor(370,96); tft.print("Grados");
}
}
}
Repito, si solo comento el comando "sensors.requestTemperatures()" desaparece el problema.
¿Hay otras librerías, o comandos, o qué estoy haciendo mal?