Je n'arrive a enchaîner 2 actions sur mon code

Bonjour a tous !

Actuellement, je suis en train de tester 2 moteurs et un endstop sur un Uno avec un shield cnc.

1 nema 17 que j'ai appellé "X" qui fonctionne avec le endstop, je veux le moteur tourne en continu et des que j'appuie sur le endstop, le moteur.
Et un autre nema17 "Z" qui lui ne fait qu'une rotation toutes les 2 secondes.

J'arrive a les lancer séparément, dont voici les 2 codes :
Pour X

const int StepX = 2; 
const int DirX = 5;
const int StepZ = 3;
const int DirZ = 6;  
const int EndstopX = 9;
void setup() {

  pinMode(StepX,OUTPUT); 
  pinMode(DirX,OUTPUT);
  pinMode(StepZ,OUTPUT); 
  pinMode(DirZ,OUTPUT);
  pinMode(EndstopX,INPUT);
  
}

void loop() {

   if( digitalRead(EndstopX) == HIGH){
    digitalWrite(StepX,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(StepX,LOW); 
    delayMicroseconds(500); 
    
   }
  
  }

et pour Z

const int StepX = 2; 
const int DirX = 5;
const int StepZ = 3;
const int DirZ = 6;  
const int EndstopX = 9;
void setup() {

  pinMode(StepX,OUTPUT); 
  pinMode(DirX,OUTPUT);
  pinMode(StepZ,OUTPUT); 
  pinMode(DirZ,OUTPUT);
  pinMode(EndstopX,INPUT);
  
}

void loop() {

 digitalWrite(DirZ, HIGH);

   for(int x = 0; x<200; x++) { // loop for 200 steps
  digitalWrite(StepZ,HIGH);
  delayMicroseconds(500);
  digitalWrite(StepZ,LOW); 
  delayMicroseconds(500); 
  }
  delay(1000); // delay for 1 second
  
  }

Mon problème est dés que j'essaye d'asembler les deux, Le moteur X ne fonctionne plus, mais que le Z.
Voici le code final

const int StepX = 2; 
const int DirX = 5;
const int StepZ = 3;
const int DirZ = 6;  
const int EndstopX = 9;
void setup() {

  pinMode(StepX,OUTPUT); 
  pinMode(DirX,OUTPUT);
  pinMode(StepZ,OUTPUT); 
  pinMode(DirZ,OUTPUT);
  pinMode(EndstopX,INPUT);
  
}


void loop() {

   if( digitalRead(EndstopX) == HIGH){
    digitalWrite(StepX,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(StepX,LOW); 
    delayMicroseconds(500); 
    
   }
    
 digitalWrite(DirZ, HIGH);

 for(int x = 0; x<200; x++) { // loop for 200 steps
  digitalWrite(StepZ,HIGH);
  delayMicroseconds(500);
  digitalWrite(StepZ,LOW); 
  delayMicroseconds(500); 
  }
  delay(1000); // delay for 1 second
  
  }
 

Quelqu'un pourrait m'aider, car je sèche
Merci d'avance

La boucle for va bloquer le code. If faut écrire du code non bloquant en utilisant micros()

Merci J-M-L

j'ai remplacé for par micros, téléversé, puis supprimer des lignes, téléversé, ca ne fonctionne pas et ca pars en tas ....

En effet, écrire un code non bloquant est plus difficile que juste changer delay en millis...

Il faut que tu fasses une machine d'états, il y a un tuto sur le forum qui explique comment faire

Tu mets une variable d'état par moteur, chaque moteur autant un état déterminé soit par le temps écoulé (d'où l'utilisation de millis) soit par le endstop.

Il y a aussi ce message :

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.