problema para "pausar" un ciclo for con un boton

hola tengo un probema, soy completamente novato en programación, el punto es que no puedo resolver este ejercicio:
Generar un programa que controle el estado de 6 leds formando una tira, del led 1 al led 6. El programa deberá encender sólo un led a la vez, por un período de 1 segundo, luego encender el siguiente en secuencia, y así del 1º al 6º. A partir de ahí invertir el sentido de número de led encendido para moverse del 6º al 1º. El ciclo deberá repetirse indefinidamente. Agregar un botón pulsador que permita pasar el ciclo de encendido, quedando el led actualmente encendido en ese estado por el tiempo que se mantenga pulsado el botón.

lo mas cerca que estado es con interrupciones pero el programa se queda con un delay infinito, intenté con millis pero cuando pauso el programa y suelto el boton los leds se desincronizan, igual intenté con otras funciones pero no me da lo que busco exactamente… ¿alguien sabe como podria “pausar” el loop para que cuando oprima el boton el led se quede encendido y cuando lo suelte el ciclo siga normalmente? de antemano muchas gracias.

int tiempo = 200; 
int n = 0; 
int pulsador = 2; 

void setup() 
{ 
  for (n=3; n<=8; n++) 
    {
    pinMode(n, OUTPUT);
    }
    pinMode(pulsador, INPUT);  
}

void loop()
  {
         for (n=3;n<=8;n++)
           {
            digitalWrite (n,HIGH);
            delay(tiempo);
            digitalWrite (n, LOW);  
           }
        for (n=7;n>=3;n--) 
          {
            digitalWrite (n,HIGH);
            delay(tiempo);
            digitalWrite (n,LOW);
          }
        
}

A ver si esto resuelve tu problema.
Usa millis() y una máquina de estados.
Tienes dos estados posibles, led en HIGH o led en LOW.
Todo ocurre si o si el pulsador esta en reposo que supuse ocurre cuando esta en LOW, si no es tu caso cambia a HIGH.

Cuando arrancas empiezas con n = 3 y luego sube porque va a derecha y cuando llega a 8 cambia a Izquierda.
Siempre repite la misma secuencia o sea los dos estados.
Un estado es el que prende el led con el n que corresponda.
El otro estado lo apaga y cambia de led sea a derecha o izquierda.
Todo ocurre SIN DELAY y dando la sensación que es instantáneo. Sin interrupciones y cosas raras.

A ver si funciona porque no esta probado.
Si algo falta intenta resolverlo por tu cuenta por favor.

const byte pulsador 	= 2;
int n;
int tiempo 		= 200;

// defino un flag que irá a derecha o izquierda controlando los leds
#define A_DERECHA 		true
#define A_IZQUIERDA		false
bool flag = A_DERECHA;
byte Detener;

void setup()
{
  for (n=3; n<=8; n++)  {
    pinMode(n, OUTPUT);
  }
  pinMode(pulsador, INPUT); 
  n = 3;
}

void loop() {

	Detener = digitalRead(pulsador); // supongo que al presionar se lee un HIGH y uso eso para detener.
	
	if (Detener == LOW)  {  // si no esta presionado hago esto.
		switch (estado) {
				case 0: digitalWrite(n, HIGH);
						estado = 1;
						t = millis();
						break;
				case 1: if (millis() - t > 1000UL) { // si es mas de 1 segundo entonces apago
							digitalWrite(n, LOW);

							if (flag) // si vamos a derecha aumentar n++
								n++;
							else      // si vamos a izquierda decrementarlo n--
								n--;
							if (n >8) {
								n = 8;
								flag = A_IZQUIERDA
							}
							if (n < 3) {
								n = 3;
								flag = A_DERECHA;
							}
							estado = 0;
						}
						break;
		}
	} 
}

Estoy para responderte las dudas.