Control de luces

Buen dia
soy un novato mas en este gran mundo, eh buscado y eh preguntado por muchas partes
incluso eh visto videos en youtube pero en ningun lugar encontre nada como lo que estoy
haciendo y solo me eh recibido ofensas. nunca habia publicado aqui, disculpen si me equivoque en algo.

Mi proyecto usa un arduino uno con un rele de cuatro canales (de momento solo utilizo 2 canales)
y un rtc 1302.

el sketch compila y se carga al arduino, el problema es que quiero encender las luces a una hora en especifico y si encienden pero a veces se apagan antes de lo planeado o se ponen intermitentes a ciertas horas. porfavor si alguien puede dar luz a este humilde ser.

#include <DS1302.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define RELAY_ON 0    
#define RELAY_OFF 1
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LCD-4/A-4   LCD-6/A-7   LCD-11-12-13-14/A-8-9-12-13

// Inicializacion del modulo.
DS1302 rtc(2, 3, 4);
Time t;

void setup()
{    
  
lcd.begin(16,2);
  lcd.backlight();
Wire.begin();

//Asegurar nivel ALTO en cada entrada de rele
  digitalWrite (5, RELAY_OFF);
  digitalWrite (6, RELAY_OFF);
  digitalWrite (7, RELAY_OFF);
  digitalWrite (8, RELAY_OFF);
  
  //Definir los pines como salida
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  pinMode (7, OUTPUT);
  pinMode (8, OUTPUT);

}

void loop() {
  // Obtencion de datos
  t = rtc.getTime();
  
  // Publicar en LCD
  // Se publicara el dia de la semana
  lcd.print("HOY:");  
  if (t.dow == 1) lcd.print("lun");  // La variable t.dow (dia de la semana) tedra valor de 1 para dia lunes y 7 para domingo.
  if (t.dow == 2) lcd.print("mar");
  if (t.dow == 3) lcd.print("mie");
  if (t.dow == 4) lcd.print("jue");
  if (t.dow == 5) lcd.print("vie");
  if (t.dow == 6) lcd.print("sab");
  if (t.dow == 7) lcd.print("dom");
  
  // Se publicaran datos de fecha, en numeros.
  lcd.print(", DIA:");
  lcd.print(t.date, DEC);  // Dia del mes.
  lcd.setCursor(0,1);
  lcd.print("MES:");  // Mes.
  lcd.print(t.mon);
  lcd.print(", DE:");
  lcd.print(t.year, DEC);  // Año.
  delay(3000);  // Demora para presentar los datos en pantalla.
  lcd.clear();
  
  // Se publicara la hora
  lcd.print("HORA:");
  lcd.print(t.hour, DEC);  // Hora en formato 0-23.
  lcd.print(", MIN:");
  lcd.print(t.min, DEC);  // Minutos.
  lcd.setCursor(0,1);
  lcd.print("SEG:");
  lcd.print(t.sec, DEC);  // Segundos.
  delay(3000);  // Demora para presentar los datos en pantalla.
  lcd.clear();
  
  //Programa para Lunes
if (t.dow == 1, t.hour == 21, t.min == 30){ digitalWrite (5,LOW);
lcd.print("Luz 1 Encendida");
delay(1000);
lcd.clear();
}
else if (t.dow == 2, t.hour == 6, t.min == 10){ digitalWrite (5,HIGH);
lcd.print("Luz 1 Apagada");
delay(1000);
lcd.clear();
}
//Programa para martes
if (t.dow == 2, t.hour == 21, t.min == 10){ digitalWrite (5,LOW);
lcd.print("Luz 1 Encendida");
delay(1000);
lcd.clear();
}
else if (t.dow == 3, t.hour == 6, t.min == 30){ digitalWrite (5,HIGH);
lcd.print("Luz 1 Apagada");
delay(1000);
lcd.clear();
}
//Programa para Miercoles
if (t.dow == 3, t.hour == 20, t.min == 55){ digitalWrite (5,LOW);
lcd.print("Luz 1 Encendida");
delay(1000);
lcd.clear();
}
else if (t.dow == 4, t.hour == 7, t.min == 1){ digitalWrite (5,HIGH);
lcd.print("Luz 1 Apagada");
delay(1000);
lcd.clear();
}
//Programa para Jueves
if (t.dow == 4, t.hour == 22, t.min == 1){ digitalWrite (5,LOW);
lcd.print("Luz 1 Encendida");
delay(1000);
lcd.clear();
}
else if (t.dow == 5, t.hour == 5, t.min == 30){ digitalWrite (5,HIGH);
lcd.print("Luz 1 Apagada");
delay(1000);
lcd.clear();
}
//Programa para Viernes
if (t.dow == 5, t.hour == 22, t.min == 40){ digitalWrite (5,LOW);
lcd.print("Luz 1 Encendida");
delay(1000);
lcd.clear();
}
else if (t.dow == 6, t.hour == 5, t.min == 10){ digitalWrite (5,HIGH);
lcd.print("Luz 1 Apagada");
delay(1000);
lcd.clear();
}
//Programa para Sabado
if (t.dow == 6, t.hour == 21, t.min == 10){ digitalWrite (5,LOW);
lcd.print("Luz 1 Encendida");
delay(1000);
lcd.clear();
}
else if (t.dow == 7, t.hour == 1, t.min == 20){ digitalWrite (5,HIGH);
lcd.print("Luz 1 Apagada");
delay(1000);
lcd.clear();
}
//Programa para Domingo
if (t.dow == 7, t.hour == 21, t.min == 10){ digitalWrite (5,LOW);
lcd.print("Luz 1 y 2 Encendidas");
delay(1000);
lcd.clear();
}
else if (t.dow == 1, t.hour == 7, t.min == 10){ digitalWrite (5,HIGH);
lcd.print("Luz 1 y 2 Apagadas");
delay(1000);
lcd.clear();
}
if (t.dow == 7, t.hour == 21, t.min == 10){ digitalWrite (6,LOW);}
else if (t.dow == 1, t.hour == 7, t.min == 10){ digitalWrite (6,HIGH);}

//Formato de pruebas
if (t.dow == 4, t.hour == 21, t.min == 17){ digitalWrite (7,LOW);
lcd.print("LED ENCENDIDO");
delay(1000);
lcd.clear();
}
else if (t.dow == 5, t.hour == 7, t.min == 10){ digitalWrite (7,HIGH);
lcd.print("LED APAGADO");
delay(1000);
lcd.clear();
}

}

prueba_1.ino (4.05 KB)

Como te dije en el hilo del 2016 que respondiste con el mismo msg que leo aquí. Los códigos deben verse, asi que lee las normas del foro y editalo con etiquetas de código para que sea visible.
Gracias.

Tienes varios errores.

  1. Primero se usa pinMode() y luego digitalWrite(), ponlo asi:
void setup(){    
   lcd.begin(16,2);
   lcd.backlight();
   Wire.begin();

   //Definir los pines como salida
   pinMode(5, OUTPUT);
   pinMode(6, OUTPUT);
   pinMode(7, OUTPUT);
   pinMode(8, OUTPUT);

   //Asegurar nivel ALTO en cada entrada de rele
   digitalWrite(5, RELAY_OFF);
   digitalWrite(6, RELAY_OFF);
   digitalWrite(7, RELAY_OFF);
   digitalWrite(8, RELAY_OFF);
}
  1. En un if() las condiciones NO van separadas por coma, sino unidas por operadores lógicos: AND (&&), OR (||) o XOR (^), asi:
//Programa para Lunes
if (t.dow == 1 && t.hour == 21 && t.min == 30){ 
      digitalWrite (5, LOW);
      lcd.print("Luz 1 Encendida");
      delay(1000);
      lcd.clear();
}

gracias por su respuesta Kike_GL, voy a corregir y probar