Empezar secuencia semáforo con pulsador

Hola.
Me presento soy nuevo en Arduino sobretodo en programación.
Estoy intentado un proyecto donde quiero hacer un gestor de carreras para coches de slot.
He empezado por el semáforo de salida, y esto ha sido fácil, funciona. Ahora quiero que al pulsar un pulsador empiece la secuencia del semáforo y mas adelanta el resto de rutinas.
Pues la verdad es que soy incapaz, he probado con If, while y no soy capaz de hacerlo.
Alguna idea?
Muchas gracias

unsigned long tiempo = 0;
int pulsador = 8;
int contador = 0;
void setup(){
  pinMode(8,INPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
}
void loop(){
  tiempo == millis();
  while(tiempo<9999999999999999999999999999999){
    digitalWrite(4,HIGH);
    if(digitalRead(pulsador) == HIGH){
    contador++;
      if(contador != 0){
        digitalWrite(4,LOW);
        digitalWrite(2,HIGH);
        delay(5000);
        digitalWrite(2,LOW);
        digitalWrite(3,HIGH);
        delay(500);
        digitalWrite(3,LOW);
        delay(500);
        digitalWrite(3,HIGH);
        delay(500);
        digitalWrite(3,LOW);
        delay(500);
        digitalWrite(3,HIGH);
        delay(500);
        digitalWrite(3,LOW);
        delay(500);
      }
  }
}
}

Ese es el código con el que hice mi primer semáforo, aunque ya sinceramente no me acuerdo de qué color era cada pin, y solo era el semáforo para coches. El while con ese tiempo menos un número muy grande, es para que se cumpla siempre, lo que pasa es que en ese momento no sabía que luego a esa variable le puedes asignar cero al final del while y nunca llegará a ese número.
millis() es una función que tiene Arduino. Mide el tiempo desde que arranca tu programa hasta el momento en el que escribes millis() (por ejemplo, asignándolo a una variable con: variable = millis();
Es difícil de pillar, pero te aconsejo que siempre que puedas y no sea mucho dolor de cabeza, no uses delay. Delay supuestamente sirve para determinar el tiempo que dura la intrucción que tiene arriba. Por ejemplo:

digitalWrite(1, HIGH);
delay(1000);

Si vieras un trozo de código así, lo que significa es que la instrucción de arriba dura x ms (digitalWrite(1, HIGH) duraría 1000ms, es decir, 1 segundo.)
El problema de delay es que te para todo el programa. En vez de hacer que dure x segundos realmente, lo que hace Arduino es realizar esa instrucción, para los ms que le pongas y luego vuelve a realizar instrucciones.
Eso te impide hacer multitarea, así que si quieres hacer un semáforo para peatones y para conductores tienes que decir adiós a delay (se podría hacer con for, pero para eso di adiós a delay, te acostumbras y luego puedes hacer 200 cosas a la vez). Si necesitas ayuda con cualquier tema en concreto pídela, te puedo pasar las capturas de novato como tú que soy, y muchas te ayudan. Mi consejo es que te hagas listas de reproducción al pie de la letra en YouTube, mantienes los códigos (y le pones su nombre por capítulo). Esos códigos para un futuro son muy buenos, y encima vas aprendiendo muchas cosas a la vez

Por cierto, verás que la variable tiempo la declaro con unsigned long, en vez de usar int. Es muy simple, int te deja poner números enteros, pero no deja almacenar números tan grandes como unsigned long. De todas formas te aconsejo ver vídeos paso a paso de cómo programar un semáforo, mejor que hacerlo de la nada, porque esquematizas la forma de hacerlo y cuando no haya vídeos para hacer x cosa lo sabrás hacer dpm

Hacer un semáforo que simplemente cumpla la secuencia es fácil.
El problema que para hacerlo seguramente has usado delay() en abundancia y como el delay() es una instrucción que detiene la ejecución del programa ahora que quieres detectar una pulsación resulta que no puedes

Lee millis() y máquina de estados, los encontrarás aquí

Ve a Documentación => Indice de temas tutoriales => millis() y también lee máquina de estados

Muchas gracias, la verdad es que he utilizado delay, como si no hubiese un mañana!!! volvemos ha empezar, realmente me encanta.
He mirado muchos vídeos y tenia todo resuelto, pero lo del delay es la primera vez que lo he visto.
Gracias de nuevo

Buenas, antes de nada, dar las gracias a los que me habéis ayudado.
Pero al final, he conseguido que funcione la primera parte de mi proyecto.
os paso el código he he creado.

Mi intención era apretar un pulsador y que iniciase la secuencia de un semáforo de salida tipo F1

int buttonState = 0;
int RED1 = 7;
int RED2 = 6;
int RED3 = 5;
int RED4 = 4;
int GREEN = 3;
int PULSA = 2;

void setup()
{
pinMode(PULSA, INPUT);
pinMode(RED1, OUTPUT);
pinMode(RED2, OUTPUT);
pinMode(RED3, OUTPUT);
pinMode(RED4, OUTPUT);
pinMode(GREEN, OUTPUT);

}

void loop()
{
buttonState = digitalRead(2);

if (buttonState == HIGH) {
// SEQUENCIA ENCESA
digitalWrite(RED1, HIGH);
delay(1000);
digitalWrite(RED2, HIGH);
delay(1000);
digitalWrite(RED3, HIGH);
delay(1000);
digitalWrite(RED4, HIGH);
delay(1000);
digitalWrite(GREEN, HIGH);
delay(1000);
digitalWrite(RED1, LOW);
digitalWrite(RED2, LOW);
digitalWrite(RED3, LOW);
digitalWrite(RED4, LOW);
digitalWrite(GREEN, LOW);

} else {
// Tot apagat
digitalWrite(RED1, LOW);
digitalWrite(RED2, LOW);
digitalWrite(RED3, LOW);
digitalWrite(RED4, LOW);
digitalWrite(GREEN, LOW);
}
delay(1000); //

Otra vez mil gracias