#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <AccelStepper.h>

// Define the stepper motor pins
#define X_STEP_PIN 18
#define X_DIR_PIN 19
#define X_EN_PIN 5


#define X_STEP_PIN 17
#define Z_DIR_PIN 16
#define Z_EN_PIN 4



// Create instances of AccelStepper for both motors
AccelStepper stepper_x(AccelStepper::DRIVER, X_STEP_PIN, X_DIR_PIN);
AccelStepper stepper_z(AccelStepper::DRIVER, X_STEP_PIN, Z_DIR_PIN);
// Struct to hold motor parameters
struct MotorParams {

  int targetPosition;
  int speed;
};

 

unsigned long lastTime = 0;
unsigned long timerDelay = 5000;
int X_Task_working = 0;
int Z_Task_working = 0;
int passValue = 0;
void setup() {
  Serial.begin(115200);  
  delay(2000);  

}

void loop() {
  if ((millis() - lastTime) > timerDelay ) { //&& state_barbot_working == 0&& f4_Task_working == 0
      Serial.println(" Loop");
      
      
      Serial.print(millis());
      Serial.print("-");
      Serial.print(lastTime);
      Serial.print("=");
        Serial.print((millis()-lastTime));
      Serial.print(">");
      Serial.println(timerDelay);
        
        if(X_Task_working == 0){
          MotorParams MOTORXParams = {  5, 200 };
          passValue = 800;
          xTaskCreatePinnedToCore(MotorXTask,"Motor X Task",1000,&MOTORXParams,0,NULL,0);//&MOTORXParams
        }
        if(Z_Task_working == 0){
          MotorParams MOTORZParams = {  6, 200 };
          passValue = 1000;
          xTaskCreatePinnedToCore(MotorZTask,"Motor Z Task",1000,(void*) passValue,1,NULL,1);
        }
          lastTime = millis();
  }

}
void MotorZTask(void *pvParam){        
   // MotorParams *params = (MotorParams *)pvParam;
 int targetPosition = (int)pvParam ;  
 // String targetPosition = params->targetPosition;
  //String speed = params->speed;
   Serial.println("---------");
  Serial.println("Z targetPosition:");
  Serial.print(targetPosition);
  //Serial.print("Z speed:");
 // Serial.println(speed);
  Z_Task_working = 1;
 
    // Move Motor Z
    stepper_z.moveTo(800); // Move 800 steps
    while (stepper_z.distanceToGo() != 0) {
      stepper_z.run();
      vTaskDelay(1); // Small delay to avoid high CPU usage
      Z_Task_working = 0;
       yield();
    }

  
}
void MotorXTask(void *pvParam){
  MotorParams *params = (MotorParams *)pvParam;        
 
 int targetPosition =  params->targetPosition;
  int speed = (int)params->speed;
   Serial.println("---------");
  Serial.println("X targetPosition:");
  Serial.print(targetPosition);
 //Serial.print("Z speed:");
  //Serial.println(speed);
  X_Task_working = 1;
 
    // Move Motor X
    stepper_x.moveTo(800); // Move 800 steps
    while (stepper_x.distanceToGo() != 0) {
      stepper_x.run();
      vTaskDelay(1); // Small delay to avoid high CPU usage
      X_Task_working = 0;
       yield();
    }

  
}
Loading
esp32-devkit-c-v4
A4988
drv1:ENABLE
drv1:MS1
drv1:MS2
drv1:MS3
drv1:RESET
drv1:SLEEP
drv1:STEP
drv1:DIR
drv1:GND.1
drv1:VDD
drv1:1B
drv1:1A
drv1:2A
drv1:2B
drv1:GND.2
drv1:VMOT
A4988
drv2:ENABLE
drv2:MS1
drv2:MS2
drv2:MS3
drv2:RESET
drv2:SLEEP
drv2:STEP
drv2:DIR
drv2:GND.1
drv2:VDD
drv2:1B
drv2:1A
drv2:2A
drv2:2B
drv2:GND.2
drv2:VMOT
stepper1:A-
stepper1:A+
stepper1:B+
stepper1:B-
stepper2:A-
stepper2:A+
stepper2:B+
stepper2:B-