Pulsadores según condiciones

Hola , lo primero las gracias a la comunidad
Mi proyecto incluye un pulsador (pulsador 1) un sensor magnético de láminas (cierre) y un motor paso a paso.
En el IDE tengo el programa para que se pulse el (pulsador 1) el motor de 700 pasos y espere a la activación del (cierre) y retroceda los 700 pasos.
Hasta aquí todo bien , ahora quiero que sin pulsar el (pulsador 1) si el (cierre cambia) que ejecute los 700 pasos como con el (pulsador 1) e igualmente retroceda cuando se active el (cierre)
gracias por todo

Olvidaste poner tu código y explicar la duda que tienes o lo que no funciona.

int PARO = 3;
int CIERRE = 6;   //sensor puerta cerrada  
int PULSADOR = 2;
int ESTADO = LOW;
#define STEP 9      // pin STEP de A4988 a pin 4
#define DIR 8     // pin DIR de A4988 a pin 5
 
void setup() 
{
  pinMode (CIERRE, INPUT);
  pinMode (PARO, OUTPUT);
  pinMode (PULSADOR, INPUT); //pin 2 como entrada
  pinMode(STEP, OUTPUT);  // pin 4 como salida
  pinMode(DIR, OUTPUT);   // pin 5 como salida
}

void loop() {
  digitalWrite(PARO, HIGH);
  
  while(digitalRead(PULSADOR) == LOW){
    }
    digitalWrite(PARO, LOW );
    
  digitalWrite(DIR, LOW);    // giro en un sentido
  for(int i = 0; i < 700; i++){     // pasos para motor salir
    digitalWrite(STEP, HIGH);       // nivel alto
    delay(1);          // 
    digitalWrite(STEP, LOW);        // nivel bajo
    delay(1);          // por 10 mseg
  }
  
   while(digitalRead(PULSADOR) == HIGH){
    }
delay(5000); 
    while(digitalRead(CIERRE) == LOW){
    }
digitalWrite(DIR, HIGH);    // giro en un sentido
  for(int i = 0; i < 700; i++){     //  pasos para motor retraer
    digitalWrite(STEP, HIGH);       // nivel alto
    delay(1);          // por 10 mseg
    digitalWrite(STEP, LOW);        // nivel bajo
    delay(1);          // por 10 mseg
  }
 
 
}
  }

lo que necesito es que con el cierre si cambia de estado también ejecute el programa como el pulsador

Si lo logras con esos delay me dices cómo.

Necesitas cambiar tu código al uso de millis(). Ve a Documentación => Indice de temas tutoriales => millis()

Cuando lo leas, conversamos sobre la solución usándolo.

Hola surbyte e estado leyendo un poco pero no comprendo porque hay que usarlo , el programa funciona bien así , lo que necesito es lo que e esplicado antes . Agradecería un poco de aclaración sobre el tema gracias

Para que que entiendas porque debes usar millis y no delay imagina esto, tu tienes los audífonos puestos y la música a máximo volumen puedes escuchar a alguien si te esta hablando, no verdad a.no ser que justo coincida en el cambio de canción. Ahora en el delay pasa algo parecido cuando tu pones un delay (10000) detienes la ejecución de las instituciones 10 segundos por lo que si tu presionas un botón el microcontrolador no se a enterado que has presionado el botón por el delay, ahora el resto de instrucción se tarda micro segundos en ejecutarse por lo que si justo coincide en que has presionado el botón y no esta ejecutando el delay te funcionará la acción que le programas al botón.

hola esto va montado en una puerta.
Esos 10 segundos son de prueba serán 5 después cuando pulsador activa la secuencia y llega al delay no me importa porque va a pasar más de esos segundos después se activará cierre y seguirá activo hasta que se abra la puerta y se desactiva. Lo tengo montado en protoboad y todo funciona bien ahora no consigo que si cierre cambia por ejemplo se abre la puerta sin pulsar pulsador que ejecute también el programa
Muchas gracias por la ayuda

@Swift
ya e modificado los 5 segundos perdon por los errores

Buenos días. E estado dándole muchas vueltas.se podría poner otra entrada(apertura)y decirle a Arduino, pulsador low es igual que apertura high? Gracias a todos por vuestro tiempo.

Si mantienes los delay en tu código, nunca te funcionará como tu quieres.
Aprende usar millis() para gestionar tiempos de espera, intermitentes, timeouts, etc.
Una vez entendido este "sistema", te aparecerá todo mucho más facíl.

@ElEspanol
hola entiendo lo del uso de milis() pero para cómo lo necesito no es necesario , solo necesito saber cómo hacer la acción , gracias

Como no terminas de entender lo que te decimos y no entiendo tu código prueba con esto

Si esta es la primer instrucción

 while(digitalRead(PULSADOR) == LOW){

agrega esto

 while(digitalRead(PULSADOR) == LOW || digitalRead(FINDECARRERA)){

Define FINDECARRERA como has hecho con pulsador y cuando se de la condición que pone en marcha tu motor tambien tendras la otra opción con el fin de carrera.

solucionado al final esta a sido la linea ganadora

while(digitalRead(CIERRE)== HIGH  && digitalRead(PULSADOR)== LOW){
 }

muchas gracias por vuestra ayuda