Comando di un motore passo-passo con pulsanti

Ok sono riuscito a risolvere il problema, adesso però ne devo affrontare un altro... Praticamente quando gli INPUT AR0 e TE1 sono allo stato logico alto, il motore gira infinite volte, ecco dovrei cercare un modo per dirgli "fai solo tot passi e poi fermati"
Qualche suggerimento? :~

il codice è il seguente

int MP1 = 50; // pin motore passo-passo
int MP2 = 51;
int MP3 = 52;
int MP4 = 53;  
int val1 = 0;  
int val2 = 0;
#define AR0 5 
#define TE1 4

void setup() {  
  pinMode(MP1, OUTPUT);
  pinMode(MP2, OUTPUT);
  pinMode(MP3, OUTPUT);
  pinMode(MP4, OUTPUT);  
  pinMode(AR0, INPUT);   
  pinMode(TE1, INPUT);  
  
}  
  
void loop() {  
  val1 = digitalRead(AR0);  
  val2 = digitalRead(TE1);
  
   
  if ( val1 == HIGH && val2 == HIGH ) {  
   digitalWrite(MP1, HIGH);
   digitalWrite(MP2, LOW);
   digitalWrite(MP3, LOW);
   digitalWrite(MP4, LOW);
   delay(5);
   digitalWrite(MP1, LOW);
   digitalWrite(MP2, HIGH);
   digitalWrite(MP3, LOW);
   digitalWrite(MP4, LOW);
   delay(5);
   digitalWrite(MP1, LOW);
   digitalWrite(MP2, LOW);
   digitalWrite(MP3, HIGH);
   digitalWrite(MP4, LOW);
   delay(5);
   digitalWrite(MP1, LOW);
   digitalWrite(MP2, LOW);
   digitalWrite(MP3, LOW);
   digitalWrite(MP4, HIGH);
  }  
  else {  
   digitalWrite(MP1, LOW);
   digitalWrite(MP2, LOW);
   digitalWrite(MP3, LOW);
   digitalWrite(MP4, LOW);
   delay(5);
   digitalWrite(MP1, LOW);
   digitalWrite(MP2, LOW);
   digitalWrite(MP3, LOW);
   digitalWrite(MP4, LOW);
   delay(5);
   digitalWrite(MP1, LOW);
   digitalWrite(MP2, LOW);
   digitalWrite(MP3, LOW);
   digitalWrite(MP4, LOW);
   delay(5);
   digitalWrite(MP1, LOW);
   digitalWrite(MP2, LOW);
   digitalWrite(MP3, LOW);
   digitalWrite(MP4, LOW); 
  }  
}