Aiuto per rotazione Stepper Motor a 2 velocità variando delay

Ho cercato su varie risorse ma forse sono "duro"
Ho 2 Stepper Motor Nema 17 bipolari (4fili), Montati su 2 controller (1 per motore) , pilotati da 1 Mega
il Codice che riporto e molto esplicativo su quello che NON riesco a fare:

int ABILITA0    =  8;//Pin su scheda MEGA 
int dirPin0     =  9;
int stepperPin0 =  10;

int ABILITA1    =  11;//Pin su scheda MEGA 
int dirPin1     =  12;
int stepperPin1 =  13;

long giro=3200  ;    //Impulsi Giro completo
  
/*******************************
 **          SETUP             **
 ********************************/
void setup()
{
  Serial.begin(9600);
  Serial.println("Dento SETUP");

  pinMode(ABILITA0,    OUTPUT);
  pinMode(dirPin0,     OUTPUT);
  pinMode(stepperPin0, OUTPUT);
//
  pinMode(ABILITA1,    OUTPUT);
  pinMode(dirPin1,     OUTPUT);
  pinMode(stepperPin1, OUTPUT);
}

/*******************************
 **          loop             **
 ********************************/
void loop() 
{  
digitalWrite (ABILITA0,HIGH);
digitalWrite (ABILITA1,HIGH);
  for (int i=0; i<giro; i++)
      {
       step0();Serial.print("Motor0_:");Serial.println(i);
       step1();Serial.print("Motor1_:");Serial.println(i);
      }
 }

 /*************************
**        Stepper       **
*************************/
 void step0()
   {
   delayMicroseconds(1000);
   digitalWrite(stepperPin0, HIGH);
   delayMicroseconds(1000);
   digitalWrite(stepperPin0, LOW);
  }

 void step1()
 {
   delayMicroseconds(22);//questo è il tempo tra una polarizzazione e l'altra
    digitalWrite(stepperPin1, HIGH);
   delayMicroseconds(22);
    digitalWrite(stepperPin1, LOW);
  }
/*************************
*************************/

Come si vede dal debug ,sia il motore"0" che il motore"1" dovrebbero girare con dei "tempi" diversi 1 dall'atro ,(si perchè voglio variare la velocità con le pause tra un impulso e l'altro diverso dai 2 motori). Qualcuno mi potrebbe cortesemente far capire se è possibile farlo e/o dove sbaglio?
Vi ringrazio cordialmente

Ciao,
cioè fammi capire deve partire prima step1 e poi dopo 1sec step0 e entrambi fanno un giro in avanti è uno indietro ?

Ciao,
Vorrei che , sfruttando il delay tra uno step e l'altro, riuscire a muovere i 2 motori indipendentemente.
Se hai visto il debutto dello sketch si vede
Motore0 step1
Motore1 step1
Motore0 step2
Motore1 step2 (e questo fino ad un giro completo) (step 3200)
.........ma così la velocità/delay di rotazione si "incasina" e non capisco il motivo.
C'è una maniera diversa o non è fattibile?
Come ho scritto sopra, ho 1 mega e 1 controller motore.....
Grazie

ciao

Usando un delay (miscoseconds o meno) blocchi il codice per il tempo impostato. Quando chiami la funzione step0() non ne esci finchè non ha finito e lo stesso per la funzione step1() quindi alla fine la velocità dei due motori sarà uguale e sarà data dalla somma dei 2 tempi di ritardo che hai impostato.

Per avere 2 velocità diverse devi usare qualcosa che non sia "bloccante" e una soluzione è quella di usare la funzione micros().

Il modo di utilizzo è lo stesso di millis()

Puoi studiare questa guida di Leo72.

ciao
pippo72

Bello!!!!! si si ! mi sembra proprio faccia a caso mio
Grazie mille pippo72 .
Provo subito. grazie ancora :slight_smile: :slight_smile: