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