Gestione indipendente di motori step

Ciao a tutti,
ho la necessità di gestire più motori step in maniera indipendente tramite timer ma mi trovo in una situazione dalla quale non riesco ad uscirne.
Supponiamo che siano solo due i motori (ma saranno 8) che devono funzionare in questo modo:

  • il primo deve fare un giro orario e uno antiorario, fermarsi per 5 secondi e ripetere il ciclo (tutto questo all'infinito)
  • il secondo deve fare un giro orario, fermarsi per 10 secondi e ripetere il ciclo (tutto questo all'infinito)

i due motori devono essere indipendenti quindi nel momento in cui parte il primo deve partire anche il secondo..

Il problema è che una volta entrato nel primo if ci rimane fino a quando il motore non ha terminato il giro orario e quello antiorario, ciò comporta che il secondo motore non partirà fino a quando il primo motore non avrà terminato la sua routine.

Avete qualche idea?

#include <Stepper.h>
Stepper myStepper(2048, 11, 9, 10, 8);

unsigned long t1; //intervallo che definisce ogni quanto deve girare il motore
unsigned long dt = 0; //variabile per il confronto del tempo attuale

unsigned long t2; //intervallo che definisce ogni quanto deve girare il motore
unsigned long dt2 = 0; //variabile per il confronto del tempo attuale

void setup(){
  Serial.begin(9600);
  myStepper.setSpeed(4);  
  t1 = 5000;
  t1 = 10000;
}

void loop(){

  if (millis()>= dt){
      float gradi = 360;
      gradi = map(gradi, 0 ,360, 0, 2048);
      myStepper.step(gradi); //gira in senso orario
      myStepper.step(-gradi); //gira in senso anti-orario
      dt = millis() + t1;
    }

  if (millis()>= dt2){
      float gradi = 360;
      gradi = map(gradi, 0 ,360, 0, 2048);
      myStepper.step(gradi); //gira in senso orario
      dt2 = millis() + t2;
    }

}

Grazie mille in anticipo a tutti

Buongiorno claudio.
Non so se hai avuto modo di visionarla, ma Il tuo problema è facilmente gestibile usando la libreria Accelstepper.
Qui il link dove trovi un'ampia documentazione in merito:
http://www.airspayce.com/mikem/arduino/AccelStepper/
Saluti
N.

A parte la AccelStepper, c'è comunque da considerare che io quando uso una libreria cerco comunque di capire come funziona, e con questo trovare le soluzioni se ci sono.
La funzione step(), come scritto nella documentazione è bloccante, quindi se devi fare altro (nel tuo caso gestire anche l'altro stepper, non so se ci sia altro) nel loop() invece di dare direttamente l'intero valore bisogna lavorare aumentando o diminuendo la posizione di 1 (o comunque un numero basso di step) fino a raggiungere la posizione desiderata.
In un progetto passato, feci proprio questo, ossia una volta determinata la posizione "target" (es. step 800), nel loop() confrontavo la posizione corrente con quella desiderata ed inviavo uno step nella direzione corrispondente (es. posizione attuale =100, posizione target =80, quindi step(-1)). Questo significa ovviamente che ti "perdi" la possibilità di regolare la velocità con la libreria ma dovrai poi tu temporizzare gli step con dei delay se non deve fare altro, altrimenti userai millis (e comunque penso che sia questo il tuo caso, perché devi avere anche temporizzazioni e pause diverse per ognuno dei motori, per i quali io definirei una variabile di stato per gestirli con una macchina a stati finiti...)