Problemas con el uso de If, condición no se cumple pero sigue accionando.

Hola. Iré directo al grano. Mi problema sucede al momento activar unos leds usando la función if, como podran ver, comparo mi variable "hora" con 7 y 10. Estoy intentando que encienda cuando "hora" este entre 7 y 10 de la mañana, enciende sin problemas pero al momento de que deje de cumplir la condición, los leds se deberían apagar pero no lo hace. He buscado información en otros lados pero no encuentro una solución.

#include <LiquidCrystal.h>
int PBu=0;  //Declaramos push botom y van en pines de arduino 1, 2, 3, 4
int PBd=1;
int PBt=2;

int ExtractorU=5; //Salidas.
int ExtractorD=6;
//Un demultiplexor para tener mas salidas, (con un MEGA tenemos suficientes).

int luzu=3; //4 salidas/control para obtener 16 con multiplexor.
int luzd=4;


int minutos=0;    //Defino variables de reloj.
int segundos=0;
int horas=0;

int x=1, L=1; //Variables para desactivado automatico.
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12); //Pines de Arduino para LCD, usaremos transmision de 4bits


void setup(){
  pinMode(luzu, OUTPUT);
  pinMode(luzd, OUTPUT);
  pinMode(ExtractorU,OUTPUT);
  pinMode(ExtractorD,OUTPUT);
 digitalWrite(luzu, LOW);
 digitalWrite(luzd, LOW;
 digitalWrite(ExtractorU, LOW);
  digitalWrite(ExtractorD, LOW);
  pinMode(PBu,INPUT); 
  pinMode(PBd,INPUT);
  lcd.begin(16, 2); //Indicamos que tipo de pantalla es.
  lcd.print("HOLA MTTO");
  lcd.setCursor(3, 0); //Inicia en espacio 8 de primer fila
  delay(2000);
  lcd.clear();
}
void loop(){
  segundos++; //Incremento en 1 los segundos
  delay(1000); //Espero 1 seg
  if (segundos>59){ //Si segundos pasa de 59, aumento 1 a minutos
      minutos++;
      segundos=0;     //segundos vuelvo a 0 
  }
  if (minutos>59){   //si minutos es mas de 59, aumento 1 a horas
  horas++;
  minutos=0;        //vuelve a 0 los minutos
  }
  lcd.setCursor(4, 1); //Posicioneamos donde queremos escribir,
  if (horas<10){       //Si horas es menor a 10 imprime 0
      lcd.print("0");
  }
  lcd.print(horas);   //Imprimimos el valor que tengamos en horas
  lcd.print(":");     //Si el valor de horas es mas de 10, se sustituira el 0 creado anteriormente
  if (minutos<10){
     lcd.print("0");
   }
   lcd.print(minutos);  //igual que con horas
   lcd.print(":");
    if (segundos<10){
        lcd.print("0");
    }
   lcd.print(segundos); 
   
   if (horas>22)
 horas=0; 
 
if(digitalRead(PBd)==HIGH)                     //Leemos pulsador designado
minutos++;                                       //si es pulsado, entonces aumenta 1 a minutos
 
 
if(digitalRead(PBt)==HIGH)                      // leemos pulsador designado
horas++;                                      // Si es pulsado, entonces aumenta 1 a horas
                                                  //!Tengo usado seccion 0 y 0 a 4 de display. Mostrara hora.¡

//Aqui incluire algun tipo de if para quitar la opcion automatica en seccion de ajustes. Una variable que siempre sea 1 y cambie en ajustes.
                                   
   if((horas>=7)&&(horas<=10)){ //la hora debe ser 7am o mayor para que se cumpla encendido y apaga cuando sea mayor de 10:59:59== 11am.
    digitalWrite(ExtractorU,HIGH);    //Encendemos 
     digitalWrite(ExtractorD,HIGH);}
    
}
     
     
     
//Aqui otro if que compare niveles de fotocelda, y despues compare con horas, para encender todo.
//Entra de 8pm a 7:59:59am para control de luz

             if((horas>=20)&&(horas<=22)){ 
                digitalWrite(luzu,HIGH); //Tengo 4 Salidas y con un multiplexor. Aun no tengo la combinacion para enceder/apagar luces
                digitalWrite(luzd,HIGH);}
                 
                 
 }

La primer parte es el código de reloj de 24hr. El código independiente funciona sin problemas. Como podrán ver, las salidas donde conecto los leds están nombradas como luzu, luzd, Extractoru y ExtractorD

Yo veo que una secuencia se activa entre determinadas horas y la otra en horas diferentes.

  if (horas>= 7 && horas<= 10) {               // la hora debe ser 7am o mayor para que se cumpla encendido y apaga cuando sea mayor de 10:59:59== 11am.
      digitalWrite(ExtractorU,HIGH);           // Encendemos 
      digitalWrite(ExtractorD,HIGH);
  }

     
  // Aqui otro if que compare niveles de fotocelda, y despues compare con horas, para encender todo.
  // Entra de 8pm a 7:59:59am para control de luz

  if (horas>=20 && horas<=22) { 
      digitalWrite(luzu,HIGH);                // Tengo 4 Salidas y con un multiplexor. Aun no tengo la combinacion para enceder/apagar luces
      digitalWrite(luzd,HIGH);
  }

Todo se resume a estas dos condiciones.

Dices que apagas pero no veo ninguna secuencia que lo haga.

La primer condición enciende los Extractores entre las 7 y las 10
La segunda condición enciende las luces entre las 20 y 22 hs.

No veo ningun
digitalWrite(ExtractorU, LOW);
o un

digitalWrite(luzd,LOW);

que permita apagar en algun momento.

Verifica esto y seguimos el debate

Hola surbyte.
Ese es el problema, tengo entendido que una vez que deje de cumplirse la condición, volverá al estado en el que fue configurado en el setup.

Hola surbyte.
Ese es el problema, tengo entendido que una vez que deje de cumplirse la condición, volverá al estado en el que fue configurado en el setup.

Negativo, si la condición no se cumple "salta" el trozo de código del if y no se ejecuta, nada mas, el valor de las variables permanecerá como estaba, necesitas poner un else para en caso de no entrar en el if ejecutar la parte de código del else y cambiar las variables.

Un saludo!

Muchas gracias, ahora comprendo cual es mi error.
Abusando ¿Alguna instrucción que me pueda a ayudar en lo que quiero hacer?.
Saludos.

O sea que no entediste esto que te escribí

No veo ningun

digitalWrite(ExtractorU, LOW);

o un

digitalWrite(luzd,LOW);

que permita apagar en algun momento.

Entonces ya que no te esfuerzas, te diré como resolver uno y el otro hazlo tu.

if (horas>=20 && horas<=22) { 
     digitalWrite(luzu,HIGH);                // Tengo 4 Salidas y con un multiplexor. Aun no tengo la combinacion para enceder/apagar luces
     digitalWrite(luzd,HIGH);
 }
else { // sin no esta entre 20 y 22 las apaga

      digitalWrite(luzu,LOW); 
     digitalWrite(luzd,LOW);
}