Problema con timers

Hola, tengo un arduino uno y estoy intentando hacer un timer que cuando la señal sea HIGH directamente no me active la salida, que espere 5 seg, si la salida es HIGH durante 5 seg quede activa.
El problema es que no puedo hacer que quede activo la salida.

//librerias primarias
#include <TVout.h>
#include <video_gen.h>
#include <fontALL.h>
#include <font4x6.h>
#include <font6x8.h>
#include <font8x8.h>
#include <font8x8ext.h>
#include <math.h>
#include <RBD_Timer.h>

//designar variables
TVout TV;

RBD::Timer timer;
/*int zOff = 150;
int xOff = 0;
int yOff = 0;
int cSize = 50;
int view_plane = 64;
float angle = PI/60;*/

//variables Temperatura
const int pinTemp = A0;

const int B = 1000;                 // B valor del termistor
const int R0 = 5000;                // R0 = 100k el mio es de 5k
float temp, temp_med = 0;           // Temperatura en ºC
float acum = 0, Vout;               // variables secundarias
float res = 0.010;                  // en V/ºC
int i, num_muestras = 100;

//variables de cambio a entero
int o;
float t;

//variable aceite
const int aceite = 8;

//variable pulsador iniciar motor
const int pulsadorIniciarMotor = 5;

//variable reset alarmas
const int resetAlarmas = 4;

//variable parada motor
const int paradaMotor = 6;

//variable servo
const int servo = 10;

//variable arranque motor
const int arranqueMotor =11;

//variable buzzer
const int buzzer = 13;

//variable boton aceite
int estado;

//variable tiempo millis
long TiempoInicial1;
long tiempofuncion1 = 5000;


//comienza y no se repite
void setup() {
  TiempoInicial1=millis();
 
//Tiempo Reset
 timer.setTimeout(1000);               //setea el tiempo de reset de variables
 timer.restart();
 
//pantalla de inicio
 TV.begin(PAL,120,96);                 //declarar tipo de video
 TV.select_font(font8x8);              //seleccionar fuente y tamaño
 TV.print(0,10,"Equipo Vigia\npuesta marcha motor");     
 TV.select_font(font8x8);
 TV.print(0,50, "T.N.A");
 TV.print(0,80,"Power by\nService Naval\nArgentina");
 TV.delay(5000);                     // delay cuenta el tiempo de cuanto esta en pantalla
    TV.clear_screen();                // pone la pantalla en negro
 


//Entrada pin analogica
 pinMode(pinTemp, INPUT); 
 
//Entrada y Salida pin digital 
 pinMode(8, INPUT);
 pinMode(6, INPUT);
 pinMode(4, INPUT);
 pinMode(5, INPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(13, OUTPUT);
  

}
// repite los procesos
void loop() {
//pantalla de variables
 TV.select_font(font4x6);
 TV.print(0,0, "velocidad motor:");
 TV.print(0,15,"temperatura agua:");      
 TV.print(0,30,"temperatura corte agua:");
 TV.print(0,45,"nivel de agua:");
 TV.print(0,60,"presion corte aceite:"); 
 TV.print(0,75,"maxima velocidad motor:"); 
   
//incio del calculo de la temperatura
  acum = 0;
  temp_med = 0;
  //Calculamos primero para el Lm35C
  for (i = 0; i < num_muestras; i++) {
    Vout = analogRead(pinTemp) * 0.00488758553275;    // step * V/step = V
    temp = Vout / res;                                // V/(V/ºC) = ºC
    acum += temp;
    temp_med = acum / num_muestras;
    delay(10);                                       // Al tener 10 milisegundos y tener 100 muestras tardara 1 segundo en hacer el bucle.
  }                                                  //Fin Calculo de temperatura
//comvertir decimal a entero
 t = temp_med;
 o = (int) t; // ahora i es 3

//Refrescar pantalla
  if(timer.onRestart()){
    TV.clear_screen();}
  
//mostrar calculos en tv
  TV.print(69,15,o); /*muestra de C°en tv*/  TV.print(82,15,"C"); //muestra de C° en tv*/


//Alarma aceite

    estado = digitalRead(aceite);    // Comprobamos el estado
    
  if(estado == HIGH){                //Comprobar el pulsador
     digitalWrite(aceite,LOW);
     TV.print(90, 60,"normal");}
  else{
     
     if (millis() >= (TiempoInicial1+tiempofuncion1)){
        digitalWrite(aceite,HIGH);
        TV.print(90, 60,"ALARMA");
         TiempoInicial1=millis();
         }
  }
  
    
      
    

//alarma Agua
 if(o <= 110)
   TV.print(90,15,"normal");
 else
   TV.print(90,15,"falla");


    


}

utilizo estas variables para el comando millis()

long TiempoInicial1;
long tiempofuncion1 = 5000;

y este es el codigo al cual quiero poner el timer:

//Alarma aceite

    estado = digitalRead(aceite);    // Comprobamos el estado
    
  if(estado == HIGH){                //Comprobar el pulsador
     digitalWrite(aceite,LOW);
     TV.print(90, 60,"normal");}
  else{
     
     if (millis() >= (TiempoInicial1+tiempofuncion1)){
        digitalWrite(aceite,HIGH);
        TV.print(90, 60,"ALARMA");
         TiempoInicial1=millis();
         }
  }

Recien hoy aprendi el comando millis pero nose como hacer para que haga lo que yo quiero.

No entiendo bien la necesidad y/o la consulta pero dejame darte algunas explicaciones que podrán ampliar tu conocimiento al respecto:

millis() te da la cantidad de milisegundos que pasaron desde que encendiste tu Arduino, asi que la forma de calcular tiempo transcurrido sería:

// Leo cuantos milisegundos transcurrieron desde que arrancó el Arduino
unsigned long var1 = millis();
...
// Ahora calculo cuanto tiempo transcurrio en segundos
unsigned int tiempoTranscurrido = (unsigned int)((millis() - var1) / 1000);

Y luego puedo comparar los segundos transcurridos con lo que yo necesite. A veces se necesita hacer una pausa, y para ello la función delay(milisegundos), donde por ejemplo delay(1000) espera 1 segundo. El problema con eso es que el programa regular no continua hasta que termina ese tiempo.

Espero que con eso puedas resolver el inconveniente y sino no dudes en ampliar la explicación y trataré de ayudarte en específico con tu código.

Saludos!

AHH ya entendi, pude resolver el problema, lo que pasa con el delay es que constantemente tengo que leer un sensor de temperatura, por eso opte por millis().

Hice una suma que cuando el pin 8 este en HIGH tarde 5 seg en activarlo. la cosa es que para reiniciar esa suma a 0 nada mas tenia que poner int 0 = millis() cuando el boton este en LOW.