RTC con DS1302 para controlar relevadores

que tal amigos estoy haciendo un proyecto para controlar con un rtc una placa de relevadores para activar unas lamaparas
el circuito de potencia es una placa para arduino de 8 relays interfaz visual es una lcd de 16x2 con protocolo de comunicacion I2R la placa es una arduino uno
el primr problema que me encontre es que no puedo activarlo con la concicion if por que solo se activa un minuto ejemplo:

 Time t = rtc.time(); 
  if(t.hr==19 && t.min==16)
  {
          digitalWrite(5,HIGH);
         // delay(300);
          digitalWrite(5,LOW);
          //delay(500);
  }
  else if(t.hr==19 && t.min==18)
  {
     digitalWrite(5,LOW);
         // delay(500);
  }

y me di cuenta que los delay interferian con el fuincionmiento de la actualizacion de la pantalla entonces use un void relay donce use la funcion milli()

void loop(){
printTime();
 if(t.hr>=19 && t.min>=16)
  {
relay();
}
if(t.hr>=22 && t.min>=00)
  {
lcd.print("relay off");
}
}
void relay(){
unsigned long currentMillis = millis();
unsigned long currentMillis1 = millis();

if (currentMillis - previousMillis >= 300) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
     digitalWrite( 5, ledState);
    
  }
  
  if (currentMillis1 - previousMillis1 >=300 ) {
    previousMillis1 = currentMillis1;
    if (ledState1 == HIGH) {
      ledState1 = LOW;
    } else {
      ledState1 = HIGH;
    }
     digitalWrite( 6, ledState1);
  }
  
}

entonces me di cuenta que la funcion millis no los toma encuenta y solo osila con el segundero del RTC
entoncs despues lo intente sacando de del void relay y de todas maneras sigue el problema
no apaga cuando lo necesito y tampoco osila los 300 milli que necesito;
anexo el codigo que tengo espero me puedan ayudar

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <stdio.h>
#include <DS1302.h>

LiquidCrystal_I2C lcd(0x3F,16,2);
boolean ledState = LOW;
boolean ledState1 = HIGH; 
unsigned long previousMillis = 0;         
unsigned long previousMillis1 = 0;  
namespace {


const int kCePin   = 2;                                // Chip Enable
const int kIoPin   = 3;                                // Input/Output
const int kSclkPin = 4;                                // Serial Clock

DS1302 rtc(kCePin, kIoPin, kSclkPin);                  // Create a DS1302 object.

String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Dom";
    case Time::kMonday: return "Lunes";
    case Time::kTuesday: return "Martes";
    case Time::kWednesday: return "Mier";
    case Time::kThursday: return "Jueves";
    case Time::kFriday: return "Vier";
    case Time::kSaturday: return "Sabado";
  }
  return "(unknown day)";
}

void printTime() {
 
  Time t = rtc.time();                                  

 
  const String day = dayAsString(t.day);                

  char buf[50]; 
 
  Wire.begin();
  lcd.begin(16, 2);

  lcd.clear();

  lcd.backlight();
  lcd.setCursor(0, 0);
  sprintf(buf, "%s",day.c_str());
  lcd.print(buf);
lcd.backlight();
  lcd.setCursor(6, 0);
  sprintf(buf, "%02d/%02d/%04d",t.date, t.mon, t.yr);
  lcd.print(buf);

  
  lcd.setCursor(8, 1);
  sprintf(buf,"%02d:%02d:%02d",t.hr, t.min, t.sec);
  lcd.print(buf);
 }


}                                                       // namespace
/*void relay(){
  
boolean ledState = LOW;
boolean ledState1 = HIGH; 
unsigned long previousMillis = 0;         
unsigned long previousMillis1 = 0;    
unsigned long currentMillis = millis();
unsigned long currentMillis1 = millis();

if (currentMillis - previousMillis >= 300) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
     digitalWrite( 5, ledState);
    
  }
  
  if (currentMillis1 - previousMillis1 >=300 ) {
    previousMillis1 = currentMillis1;
    if (ledState1 == HIGH) {
      ledState1 = LOW;
    } else {
      ledState1 = HIGH;
    }
     digitalWrite( 6, ledState1);
  }
  

  }*/

void setup() {
  Serial.begin(115200);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
                                                        
  rtc.writeProtect(false);
  rtc.halt(false);

                                                          // Sunday, September 22, 2013 at 01:38:50.
 //Time t(2017, 5, 16, 14, 14, 00, Time::kTuesday);

                                                            // Set the time and date on the chip.
// rtc.time(t);
}

                                                          // Loop and print the time every second.
void loop() {
  printTime();
    
unsigned long currentMillis = millis();
unsigned long currentMillis1 = millis();

if (currentMillis - previousMillis >= 300) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
     digitalWrite( 5, ledState);
    
  }
  
  if (currentMillis1 - previousMillis1 >=300 ) {
    previousMillis1 = currentMillis1;
    if (ledState1 == HIGH) {
      ledState1 = LOW;
    } else {
      ledState1 = HIGH;
    }
     digitalWrite( 6, ledState1);
  }
  
 //if(t.hr>=6 && t.min>=40);
//  relay(); 
  
/* else(t.hr>=20 && t.min>=45);
  {
      lcd.setCursor(0, 1);
      lcd.print("relay OFF");
  }*/
  
}

el primr problema que me encontre es que no puedo activarlo con la concicion if por que solo se activa un minuto ejemplo

Se activa un minuto porque tu código dice eso.

if(t.hr==19 && t.min==16)
  {
          digitalWrite(5,HIGH);
         // delay(300);
          digitalWrite(5,LOW); // <== QUE SENTIDO TIENE ESTO LUEGO DE PONERLO EN HIGH?
          //delay(500);
  }
  else if(t.hr==19 && t.min==18)
  {
     digitalWrite(5,LOW);
         // delay(500);
  }

Ahi dice a las 19:16 pin 5 en HIGH y luego pones PIN 5 en LOW inmediatamente
Comenta esa linea que te marco
a las 19:18 supuestamente lo apagas

Lo de millis() no lo vi aún.

surbyte los delay los quite por que me genran problemas , pero lo que necesito una osilacion entre esos dos relay cuando uno este encendio el otro deve de estar apagado
y digamos que en el codigo siguinte quiero que por un periodo de 5 horas esten osilando y despus se apaguen
if(t.hr>=19 && t.min>=16)
{
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
delay(300);
digitalWrite(6,HIGH);
digitalWrite(5,LOW); // <== QUE SENTIDO TIENE ESTO LUEGO DE PONERLO EN HIGH? necesito la cecuencia d encendido y apagado para los relevadores que controlan una servo valvula
delay(500);
}
else if(t.hr>=19 && t.min>=18)
{
digitalWrite(5,LOW);
digitalWrite(6,LOW);}
ese seria el codgio que use ,para ver que los delay no funciona,¿ porque? ponen en pausa el controlador y la hora se ve afectada cuando la imprimo en la pantalla, ese retraso no me deja visualizar los segundos corridos durante la pausa y brica d 2 en 2 osea 2,4,6,8, n.... en ocaciones el desface puede ser de 3

Vamos a entendernos bien porque lo anterior para mi esta confusa la idea

Tienes un horario en el que quieres que los reles cambien

         digitalWrite(6,LOW);
          digitalWrite(5,HIGH);
          delay(300);
          digitalWrite(6,HIGH);
          digitalWrite(5,LOW);

o sea cada 300 mseg?
y todo x 5 hs
Ahora para tu prueba lo haces por 2 minutos, es asi?

Hay que explicarse en la vida para entendernos.