Aiuto! Pilotare 2 motori passo passo arduino

Come ho detto nel titolo vorrei pilotare 2 motori passo passo con arduino mega,
in poche parole avrei due pulsanti, uno che manda avanti un motore e l'altro che manda avanti l altro motore, che in seguito monterei su una tavola di legno. cosi facendo, attivando entrambi i motori mi si muoverebbe in avanti, se ne premessi solo uno girerebbe.
Da solo non ci son riuscito, ho avuto un paio di problemi.
Il primo è stato che quando premevo il pulsante il motore partiva ma al mio rilascio non si fermava.
Il secondo è che contemporaneamente non vanno, solo se li premo separatamente i motori girano.

Questo è il mio sketch.

#include <LiquidCrystal.h>
//LiquidCrystal lcd(8,9,4,5,6,7);
#define BUTTONO 8
#define LED 13 // LED collegato al pin digitale 13
#define BUTTON 7 // pin di input dove è collegato il pulsante
int val = 0; // si userà val per conservare lo stato del pin di input
int valo = 0;
void setup() {
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);

//forzo le uscite a livello logico basso
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);

pinMode(32, OUTPUT);
pinMode(33, OUTPUT);
pinMode(34, OUTPUT);
pinMode(35, OUTPUT);

//forzo le uscite a livello logico basso
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(34, LOW);
digitalWrite(35, LOW);

pinMode(LED, OUTPUT); // imposta il pin digitale come output
pinMode(BUTTON, INPUT); // imposta il pin digitale come input
pinMode(BUTTONO,INPUT);
}

void loop() {

val = digitalRead(BUTTON); // legge il valore dell'input e lo conserva
valo = digitalRead(BUTTONO);

if (val==HIGH) {
for(int i=0;i<1000;i++){antiorario();}
delay(10000);
}

if (valo==HIGH) {
for(int i=0;i<1000;i++){orario();}
delay(10000);
}

// controlla che l'input sia HIGH (pulsante premuto)
if (val == HIGH) {
digitalWrite(LED, HIGH); //accende il led
}
else {
digitalWrite(LED, LOW); //spegne il led
}
}

void antiorario()
{
//FASE 1
//Alimento solo la prima bobina
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(34, LOW);
digitalWrite(35, HIGH);
delay(5);

//FASE 2
//Alimento solo la seconda bobina
digitalWrite(32, LOW);
digitalWrite(33, HIGH);
digitalWrite(34, LOW);
digitalWrite(35, LOW);
delay(5);

//FASE 3
//Alimento solo la terza bobina
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(34, HIGH);
digitalWrite(35, LOW);
delay(5);

//fase 4
//Alimento solo la quarta bobina
digitalWrite(32, HIGH);
digitalWrite(33, LOW);
digitalWrite(34, LOW);
digitalWrite(35, LOW);
delay(5);

}

void orario()
{
//FASE 1
//Alimento solo la prima bobina
digitalWrite(22, HIGH);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
delay(5);

//FASE 2
//Alimento solo la seconda bobina
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, HIGH);
digitalWrite(25, LOW);
delay(5);

//FASE 3
//Alimento solo la terza bobina
digitalWrite(22, LOW);
digitalWrite(23, HIGH);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
delay(5);

//fase 4
//Alimento solo la quarta bobina
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, HIGH);
delay(5);

}

Uso un ln298n come driver del motore. Spero che mi aiutiate! grazie in anticipo!

Certo che si muovono ad uno ad uno, visto che richiami i movimenti con dei for e li richiami separatamente oltretutto con un delay enorme alla fine.

metti una cosa del genere
vado a occhio

if (val && valo)
 {
   for (int i=0; i<1000; i++)
      {
         entrambi();
         delayMicroseconds(......quello che troverai con vari tentativi);
         
      }
}
else if (val) orario();
else if (valo) antiorario();

dove in entrambi() invii in sequenza le eccitazioni a fase1motore1 fase1motore2 fase2mot1 fase2mot2 e così via, vedi quel delay 5 che forse è troppo alto.

Nicholasxxx:
Questo è il mio sketch.

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Da profano, ma non sarebbe meglio dichiarare il tipo Val/valo come booleano invece di int? sicuramente così com'è adesso funziona perché qualsiasi valore >0 sarebbe interpretato come HIGH, ma credo che indicandolo come Booleano, sicuramente sarebbe meglio, no?

Sicuramente la ragione per la quale non ti va se un pulsante è già premuto è come ti è stato già indicato, mentre sta eseguendo uno dei for, non vi è possibilità di eseguire l'altro bottone fino a quando non finisce il for e non sono passati 10 secondi. Una curiosità, ma a cosa ti serve che esegua questi for e con una pausa così lunga al finale? Secondo me, per questa applicazione ti servirebbe implementare comunque un "debounce" dei pulsanti (guarda gli sketch esempio).

Purtroppo non ho hardware per provare (solo delle UNO R3 e niente LN298N) mi dispiace.