Problema con código. Bucle finito y tiempos

Buenas tardes,
No soy muy buena en códigos, estoy iniciándome en este mundo.
Y tengo un problema con el que me gustaría que alguien me ayudara:
En este código lo que pretendo es encender 4 bombillas, están instaladas con un arduino uno y una placa de 4 relés. La idea es encender cada bombilla en un determinado tiempo, que todas se queden encendidas y después de un tiempo se apaguen todas a la vez y que este ciclo sea único, que no entre en bucle.
He conseguido casi todo, pero no consigo que sea un único ciclo y no se me mantienen el tiempo que estipulo encendidas al final. se me apagan antes y no sé por qué.
Os paso el codigo a ver si alguien sabe explicarme
Muchas gracias
// Encendido y apagado de 3 LEDs

int On_Off_Bucle = 2; // Entrada de Bucle On / Off. Pin 2 a GND solo un ciclo, Pin 2 a Vcc el ciclo se repite.

int ledPin1 = 6; // Define las salidas de los LED's
int ledPin2 = 7;
int ledPin3 = 8;
int ledPin4 = 9;

bool Primer_Ciclo = true;

// Intervalo / Totales
unsigned long Tiempo_Led_01 = 45000; // 00:45 seg / 00:45 min
unsigned long Tiempo_Led_02 = 155000; // 02:25 min / 03:20 min
unsigned long Tiempo_Led_03 = 70000; // 01:10 min / 04:30 min
unsigned long Tiempo_Led_04 = 255000; // 04:15 min / 08:45 min
unsigned long Tiempo_Apagado = 375000; // 06:15 min / 15:00 min

// Configura las SALIDAS
void setup()
{
pinMode(On_Off_Bucle, INPUT); // Interruptor On / Off de ciclico

pinMode(ledPin1, OUTPUT); // declarar LEDs como SALIDAS
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);

digitalWrite(ledPin1, LOW); // Apaga los LEDs
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
}

//Bucle de Funcionamiento
void loop()
{

while (Primer_Ciclo == true || digitalRead(On_Off_Bucle) == true)
{

delay(Tiempo_Led_01);
digitalWrite(ledPin1, HIGH); // 45 seg

delay(Tiempo_Led_02);
digitalWrite(ledPin2, HIGH); // 3,3 min

delay(Tiempo_Led_03);
digitalWrite(ledPin3, HIGH); // 4,5 min

delay(Tiempo_Led_04);
digitalWrite(ledPin4, HIGH); // 8,75 min

delay(Tiempo_Apagado);
digitalWrite(ledPin1, LOW); // 5 min
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);

Primer_Ciclo = false;
}

}

Lee las Normas del foro.

Mi 10 mensaje en lo que va del día pidiendo que lean las normas y editen el post.
En tu caso, además posteaste una consulta en la sección Proyectos siendo que hay un hilo anterior que pide que se lean antes de postear en esa sección pero.. de nada sirve. Es como poner señales de transito y de todos modos, todos chocan.

Prueba esto a ver como se comporta.

COmo puse, los ciclos los manejas a gusto porque eso es una máquina de estados que no se FRENA usando delay()

// Encendido y apagado de 3 LEDs

int On_Off_Bucle = 2; // Entrada de Bucle On / Off. Pin 2 a GND solo un ciclo, Pin 2 a Vcc el ciclo se repite.

int ledPin1 = 6;  // Define las salidas de los LED's
int ledPin2 = 7;
int ledPin3 = 8;
int ledPin4 = 9;

bool Primer_Ciclo = true;

// Intervalo /   Totales
unsigned long Tiempo_Led_01   = 45000;  // 00:45 seg    /   00:45 min
unsigned long Tiempo_Led_02   = 155000; // 02:25 min    /   03:20 min
unsigned long Tiempo_Led_03   = 70000;  // 01:10 min    /   04:30 min
unsigned long Tiempo_Led_04   = 255000; // 04:15 min    /   08:45 min
unsigned long Tiempo_Apagado  = 375000; // 06:15 min    /   15:00 min
unsigned long start;
byte estado = 0;

// Configura las SALIDAS
void setup()
{
  pinMode(On_Off_Bucle, INPUT); // Interruptor On / Off de ciclico

  pinMode(ledPin1, OUTPUT);  // declarar LEDs como SALIDAS
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);

  digitalWrite(ledPin1, LOW); // Apaga los LEDs
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
}

//Bucle de Funcionamiento
void loop() {
  // los ciclos los controlas como gustes
  switch (estado) {
      case 0: digitalWrite(ledPin1, HIGH);          
              start = millis();
              estad = 1;
              break;
      case 1: if (millis() - start > Tiempo_Led_01) {  // 45 seg LedPin1
                  digitalWrite(ledPin2, HIGH);          // 3,3 min
                  start = millis();
                  estad = 2;
              }
              break;
      case 2: if (millis() - start > Tiempo_Led_02) {   // 3,3 min LedPin2
                  digitalWrite(ledPin2, HIGH);          
                  start = millis();
                  estad = 3;
              }
              break;              
      case 3: if (millis() - start > Tiempo_Led_03) {   // 4.5 min LedPin3
                  digitalWrite(ledPin3, HIGH);          
                  start = millis();
                  estad = 4;
              }
              break;              
      case 4: if (millis() - start > Tiempo_Led_04) {   // 8.75 min LedPin4
                  digitalWrite(ledPin4, HIGH);          
                  start = millis();
                  estad = 5;
              }
              break;              
      case 5: if (millis() - start > Tiempo_Apagado) {   // Apago todo
                  digitalWrite(ledPin1, LOW);          
                  digitalWrite(ledPin2, LOW);
                  digitalWrite(ledPin3, LOW);
                  digitalWrite(ledPin4, LOW);
                  estad = 0;                       // recomienza
              }
              break;              
  }
}

NO uses DELAY. Delay hace que todo lo que programes falle, porque solo sirve para secuencias donde no se hace nada extra.