Pulsador accionado detener loop

Hola como muchos soy nuevo en este mundo y aunque ya he hecho algún que otro proyecto a base de leer y buscar información con el actual estoy bloqueado.

La finalidad de mi proyecto es tras accionar un pulsador, encender un motor a traves de un rele y una bateria durante un tiempo determinado, el problema lo tengo en que si dejo accionado el pulsador el motor sigue girando.
Me gustaría detener el motor durante un segundo aunque el pulsador este accionado; este es el código que a duras penas he podido hacer, mis conocimientos son por debajo de básico.

Gracias

const int RELE=3;
const int BOTON=2;
int val; 
void setup(){
pinMode(RELE,OUTPUT);
pinMode(BOTON,INPUT); 
}
void loop(){ 
val=digitalRead(BOTON); 
if  (val==HIGH){
digitalWrite(RELE,HIGH);
delay(25);  
} 
else { digitalWrite(RELE,LOW);     
}
}

Entonces... Al pulsar el botón el motor debe girar por un segundo y detenerse, aunque dejes presionado el boton?

Hola, gracias por contestar, tendría que girar medio segundo y para un segundo aunque el pulsador este accionado, pasado este segundo podría volver a ejecutar la orden de medio segundo funcionando un segundo parado.

(el tiempo que tiene que estar girando no lo tengo muy claro todavía, podría cambiar el valor en un futuro, el tiempo de estar parado si que debería de ser un segundo)

Ve a Documentación => Indice de temas tutoriales => millis()

Este código hará lo que tu deseas siempre y cuando el relé este bien conectado para tu caso porque para mi el HIGH y LOW estan al revés. te lo indico en el código.

const byte RELE  = 3;
const byte BOTON = 2;
bool val, valAnt = false;
unsigned long start;

void setup(){
 pinMode(RELE,OUTPUT);
 pinMode(BOTON,INPUT);
}

void loop(){
   val = digitalRead(BOTON);
   if  (val && !valAnt){ // supongo un cambio de 0 a 1 sino invierte ! en ambas variables
        flag = true;
        start = millis();
        digitalWrite(RELE,HIGH); // ojo según que rele esto apaga no enciende.
   }
   valAnt = val;

   if (flag) {  // si hay disparo por pulador entonces
       if (millis() - start > 500UL) {
           flag = false;
           digitalWrite(RELE,LOW);     // y esto acciona no apaga el rele
                                       // lo escribo como lo tienes tu.
       }
   }
}

Bien, según yo entendí, el ciclo se debe repetir mientras el pulsador esté oprimido

Por si acaso aquí dejo mi propuesta de código, que hace cíclico el funcionamiento del rele, así tiene las 2 opciones

const byte RELE=3;
const byte BOTON=2;
bool  estadoPulsador, anteriorPulsador;
unsigned long tActual, db; 
unsigned long tiempoEncendido=500;    //cambia estos valores segun tu necesidad
unsigned long tiempoApagado=1000;
byte estados;

void setup(){
pinMode(RELE,OUTPUT);
pinMode(BOTON,INPUT); 
}

void loop(){ 
 estadoPulsador=digitalRead(BOTON);

 if (estadoPulsador && !anteriorPulsador && millis() - db >= 60UL){
       estados=1;
       db=millis();
  }
 
 if (!estadoPulsador && anteriorPulsador && millis() - db >= 60UL){
       estados=0;
       db=millis();  
     }    
     anteriorPulsador=estadoPulsador;
     
 	  switch (estados) {
 	      case 1:
 	        digitalWrite(RELE, HIGH);
 	        tActual=millis();
 	        estados=2;
 	      break;

 	      case 2:
 	        if(millis()- tActual >= tiempoEncendido){
 	        	 digitalWrite(RELE, LOW);
 	        	 tActual=millis();
 	        	 estados=3;           
 	        }
 	        break;

 	       case 3:
 	         if(millis() - tActual >= tiempoApagado)
 				   estados=1;
 		   break;		      

 	      default:
 	       digitalWrite(RELE, LOW); 
 	 
 	  	  }   
 }

Hola, muchas gracias por vuestra ayuda, cualquiera de las dos opciones me vienen bien, gracias a estos códigos podre trabajar con nuevas opciones y seguir aprendiendo.

Muchas gracias