Cómo aplicar temporizaciones diferentes a varias salidas?

¿Cómo puedo aplicar temporizaciones diferentes para varias salidas? Por ejemplo que la salida 5 se deconecte a los 2 segundos, la salida 6 a los 5 segundos y la 7 a los 10 segundos.
¿Cómo puedo hacer para que el rele1 (4) se desactive a los 2 segundos, sin afectar al resto del bucle, en el siguiente programa?:

int pulsador1=2; // asigna el pin 2 para el pulsador1
int pulsador2=3; // asigna el pin 3 para el pulsador2
int rele1=4; // asigna el pin 4 para el relé1
int rele2=5; // asigna el pin 5 para el relé2
int rele3=6; // asigna el pin 5 para el relé3
int p1=0; // variable para el estado de pulsador1
int p2=0; // variable para el estado de pulsador2
int inicio=0; // variable para el inicio del programa

void setup () {
pinMode (rele1, OUTPUT); // declara el rele1 como salida
pinMode (rele2, OUTPUT); // declara el rele2 como salida
pinMode (rele3, OUTPUT); // declara el rele3 como salida
pinMode(pulsador1, INPUT); // declara el pulsadir1 como entrada
pinMode(pulsador2, INPUT); // declara el pulsadir2 como entrada
}

void loop () {
p1=digitalRead (pulsador1); // lee valor de la entrada
p2=digitalRead (pulsador2); // lee valor de la entrada
for(int i=0; i<35; i=i+1) { // crea un bucle de 35 ciclos
if (p1==1 || p2==1) { // si están activos p1 o p2
inicio=1; // activa la variable para el inicio del programa
}
if(inicio==1){
digitalWrite (rele1, LOW); // desactiva el relé1
digitalWrite (rele2, LOW); // desactiva el relé2
digitalWrite (rele3, LOW); // desactiva el relé3
delay(180); //esperamos 0.18 segundos
digitalWrite (rele2, HIGH); // activa el relé2
digitalWrite (rele3, HIGH); // activa el rele3
delay(250); //esperamos 0.25 segundos
}
if(inicio==0) {
digitalWrite (rele1, HIGH); // activa el relé1
digitalWrite (rele2, HIGH); // activa el relé2
digitalWrite (rele3, HIGH); // activa el relé3
}
if (i==35);
inicio=0;
}
}

Gracias de antemano!

Archivos-Ejemplos-Digital-BlinkWhitoutDelay

Jopapa

Saludos.
Usa el ejemplo del blink si delay.

Ejemplo
Unsigned long tiempo;

Void setup(){
Tiempo=millis();
}

Void loop(){
If(millis()-tiempo>2000){ // accion despues de dos segundo

}

If(millis()-tiempo>5000){ //accion despues de cinco segundos

}

}

hola tengo casi el mismo problema ya pudiste solucionar algo yo en este momento puedo prender un rele y hasta que no termine el tiempo que le dije que quedara encendido no puedo prender el otro

Bueno aqui le coloco un codigo basico para hacer el encendido de cinco leds simultáneamente.

/* Encender varios led difentes tiempos
El primer led encendera entre 1 y 10 segundos despues de iniciado el programa
El segundo encendera a los 2 segundos y finalizara a los 5s
El tercer led encendera a los 10s y finalizara a los 21s
El cuarto encendera a los 0,5s de iniciado el Sketch y apagara a los 8s
El quinto y ultimo led iniciara a los 0,5s y se apagara a los 25 s
cuando el quito led se apague toda la rutina comienza a repetirse.
*/

unsigned long tiempo;
int leds[5]= {2,3,4,5,6};
void setup(){
  for(int i =0; i<5;i++){ //Configura salida de leds en pines 2, 3,4,5 y 6 como salida
    pinMode(leds[i],OUTPUT);
  }
  tiempo= millis();
}
void loop(){
  if(millis()-tiempo>1000 && millis()-tiempo < 10000){
    digitalWrite(leds[0],HIGH);
  }else
  if (millis()-tiempo > 10000){
    digitalWrite(leds[0],LOW);
  } //primer 
  if(millis()-tiempo>2000 && millis()-tiempo < 50000){
    digitalWrite(leds[1],HIGH);
  }else
  if (millis()-tiempo > 5000){
    digitalWrite(leds[1],LOW);
  } //Segundo
  if(millis()-tiempo>10000 && millis()-tiempo < 21000){
    digitalWrite(leds[2],HIGH);
  }else
  if (millis()-tiempo > 21000){
    digitalWrite(leds[2],LOW);
  } //tercer 
  if(millis()-tiempo>500 && millis()-tiempo < 8000){
    digitalWrite(leds[3],HIGH);
  }else
  if (millis()-tiempo > 8000){
    digitalWrite(leds[3],LOW);
  } //cuarto 
   if(millis()-tiempo>500 && millis()-tiempo < 25000){
    digitalWrite(leds[4],HIGH);
  }else
  if (millis()-tiempo > 25000){
    digitalWrite(leds[4],LOW);
    tiempo= millis();
  } //quinto  
  
}

Muchísimas gracias Max! Lo probaré en cuanto tenga un momento. Seguro que le resulta útil a alguien más.
En mi programa no me ha ido muy bien con los "millis" a lo mejor es por usar también el "delay"
Lo he medio resuelto usando un contador para hacer temporizaciones.

Esto puede valerte:

Max, el programa que pusiste funciona perfectamente y además es sencillo de modificar.
Solo una cosa: la secuencia arranca sola, ¿cómo hacer para que arranque con un pulsador? seguramente sea una tontería, pero estoy hecho un lío.
Muchas gracias!

Saludos
Ok te colocare el Sketch de una forma mas ordenada, en el circuito ademas de los leds debes conectar un pulsador entre el pin 7 y GND, cada vez que presiones el pulsador cambiara el estado de apagado a encendido, y de encendido a apagado. Ademas tiene un retardo de 50 milisegundos para evitar rebotes al presionar el botón.

/* Encender varios led difentes tiempos
El primer led encendera entre 1 y 10 segundos despues de iniciado el programa
El segundo encendera a los 2 segundos y finalizara a los 5s
El tercer led encendera a los 10s y finalizara a los 21s
El cuarto encendera a los 0,5s de iniciado el Sketch y apagara a los 8s
El quinto y ultimo led iniciara a los 0,5s y se apagara a los 25 s
cuando el quito led se apague toda la rutina comienza a repetirse.
*/

unsigned long tiempo;

int leds[5]= {2,3,4,5,6};
int pin_boton= 7; // Pin para el boton
boolean activa = false; //Variable de control de encendido


void setup(){
  for(int i =0; i<5;i++){ //Configura salida de leds en pines 2, 3,4,5 y 6 como salida
    pinMode(leds[i],OUTPUT);
  }
  pinMode(pin_boton,INPUT);
  tiempo= millis();
  digitalWrite(pin_boton,HIGH);
}
void loop(){
  if (digitalRead(pin_boton) == LOW){ //Revisa que has presioando el boton
    delay(50);
  if (digitalRead(pin_boton) == LOW){ // Espera 50 milisegundos para evitar antirrebotes.
      while(pin_boton == LOW){} //Espera que sueltes el boton
      if(activa==true){Activa = false;} //Si esta activo se apaga
      if(activa==false){Activa = true;} // Sie sta apagado se activa   
    }
  }
  if(activa == true){ //Si esta activo llama a la fucion encender_leds();
    encender_leds();
  }
}


void encender_leds(){
  if(millis()-tiempo>1000 && millis()-tiempo < 10000){
    digitalWrite(leds[0],HIGH);
  }else
  if (millis()-tiempo > 10000){
    digitalWrite(leds[0],LOW);
  } //primer 
  if(millis()-tiempo>2000 && millis()-tiempo < 50000){
    digitalWrite(leds[1],HIGH);
  }else
  if (millis()-tiempo > 5000){
    digitalWrite(leds[1],LOW);
  } //Segundo
  if(millis()-tiempo>10000 && millis()-tiempo < 21000){
    digitalWrite(leds[2],HIGH);
  }else
  if (millis()-tiempo > 21000){
    digitalWrite(leds[2],LOW);
  } //tercer 
  if(millis()-tiempo>500 && millis()-tiempo < 8000){
    digitalWrite(leds[3],HIGH);
  }else
  if (millis()-tiempo > 8000){
    digitalWrite(leds[3],LOW);
  } //cuarto 
   if(millis()-tiempo>500 && millis()-tiempo < 25000){
    digitalWrite(leds[4],HIGH);
  }else
  if (millis()-tiempo > 25000){
    digitalWrite(leds[4],LOW);
    tiempo= millis();
  } //quinto  
}