control de ambiente (problemas para configurar termostato) cod completo.

Hola gente buenos dias.
hace unos cuantos dias estoy intentando salir de esta situacion y no encuentro la solucion
esto es un control de ambiente, en este caso de un indoor, pero se puede emplear en otros escenarios.

la cuestion es la siguiente:
tengo una pantalla en la que veo la hora y presionando un boton puedo ir a otra y configurarla
luego en otro case informacion de temp y humedad.
luego informacion de temperatura de la lampara.
luego la informacion de timer off y presionando boton configuramos.
luego la informacion de timer on y presionando boton configuramos.
y finalmente llegamos a la parte en cuestion
2 casos mas 1 la temp cuando la lampara esta encendida
y el ultimo cuando la lampara esta apagada.
por algun motivo que no identifico no funciona correctamente, si configuro la temperatura con sin luz cuando enciende la luz deberia pasar a comparar la temp actual con la temp seteada en temperatura con luz. pero no lo hace… alguien me podria ayudar dejo adjunto imagenes, el cod completo y la simulacion para proteus.

PROBLEMA: cuando la luz esta apagada enciende el pin12 con la temperatura asignada en TempOff y funciona bien. el problema es cuando enciende la luz deberia regular la temperatura en base a TempOn. pero lo sigue haciendo con TempOff.

(Adjunto el .ino tambien porque no me alcanzan los caracteres para subirlo :S)

version1.ino (16.2 KB)

Final version1.zip (53.7 KB)

Y te regula bien la temperatura aun con la variable equivocada?
Según el código cuando tienes la luz encendida no parece tener corte al alcanzar la temperatura marcada.

float temp = dht.readTemperature();

  if (digitalRead(13) == HIGH) {
    if (dht.readTemperature() <= TempOn) digitalWrite(12, HIGH);
    else digitalWrite(12, LOW); //esta linea no sale en tu código
  }
  else {
    if (dht.readTemperature() <= TempOff) digitalWrite(12, HIGH);
    else digitalWrite(12, LOW);
  }

creo que lo resolvi asi:

no se muy bien lo que hice para ser sincero pero algo de lo que modifique aca lo arregló
lo unico que cuando inicia inicia con la temp de la lampara encendida y se corrige una vez que inicia el timer... ya le voy a encontrar la vuelta para arrglar eso.

lo unico que no estoy seguro de como hacer es que el DHT11 me de resultados enteros, no quiero que el termostato encienda a los 20.10 por ejemplo, que encienda a los 21 directamente alguna idea para eso?

void loop() {
 if(actualizar == true){
    actualizarReloj();
    
    actualizar = false;
  }

 estadoLamp = digitalRead(13);
 if (estadoLamp != estadoAnteriorLamp){
  if (estadoLamp == HIGH){
   digitalWrite(12,HIGH);
  }
  else{
    digitalWrite(12,LOW);
  }
 }
estadoAnteriorLamp = estadoLamp;
digitalWrite(12,LOW);

if (actualizar1 == false && TempOff >= dht.readTemperature()){
  digitalWrite(12,HIGH);
  delay (200);
}
if (actualizar1 == true && TempOn >= dht.readTemperature()){
  digitalWrite(12,HIGH);
  delay (200);
}


if(segundos==0 && horas == horas_alarma2 && minutos == minutos_alarma2){
  digitalWrite(13,LOW);
  actualizar1=false;
  
}
  if(segundos==0 && horas == horas_alarma && minutos == minutos_alarma){
  digitalWrite(13,HIGH);
  actualizar1=true;

Usa int en lugar de float