Problemas para hacer Plotter XY Motor 28byj-48 Sin Librería

Buenas, estoy hace algunas semanas armando un plotter xy con dos motores 28byj-48 se me recomendó no trabajar con librerias para tener mayor precisión y de paso aprender más, pero se me está complicando bastante. Hasta ahora llegue a dos versiones muy basicas, una en la cual con un button acciono paso por paso los motores y otra en la que acciono los motores con un ciclo for y los detengo con un delay cuando llegan a la cantidad de pasos que yo deseo.

Actualmente tengo 2 objetivos que no puedo resolver:

1- Indicarle a mis motores independientemente cuantos pasos hacer y frenarse, sin uso delay ni millis.

2- Se que para sacar la distancia media tengo que usar el teorema de pitágoras, pero todavía no me figuro del todo como aplicar esa ecuación dentro del sketch.

Cualquier dato, tutorial o post me es de ayuda, muchas gracias!!

Pd: adjunto el sketch que uso para con el boton, el resto de mis versiones oscilan con esta.

// constants won't change. They're used here to set pin numbers:

const int buttonPin = 2;     // the number of the pushbutton pin

// variables will change:

int buttonState = 0;         // variable for reading the pushbutton status
boolean flag = true;

const int motorPinb1 = A0;    // 28BYJ48 In1
const int motorPinb2 = A1;    // 28BYJ48 In2
const int motorPinb3 = A2;   // 28BYJ48 In3
const int motorPinb4 = A3;   // 28BYJ48 In4
const int motorPin1 = 8;    // 28BYJ48 In1
const int motorPin2 = 9;    // 28BYJ48 In2
const int motorPin3 = 10;   // 28BYJ48 In3
const int motorPin4 = 11;   // 28BYJ48 In4

unsigned long previousMillis = 0;
unsigned long previousMicros = 0;
const long interval = 60;                   

//definicion variables

int motorSpeed = 1200;   //variable para fijar la velocidad
int stepCounter = 0;     // contador para los pasos
int stepsPerRev = 4076;  // pasos para una vuelta completa

 

//tablas con la secuencia de encendido (descomentar la que necesiteis)

//secuencia 1-fase

//const int numSteps = 4;

//const int stepsLookup[4] = { B1000, B0100, B0010, B0001 };

//secuencia 2-fases

//const int numSteps = 4;

//const int stepsLookup[4] = { B1100, B0110, B0011, B1001 };

 

//secuencia media fase

const int numSteps = 8;

const int stepsLookup[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 };

//------------------
void setup()
{

  pinMode(buttonPin, INPUT);
  
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(motorPinb1, OUTPUT);
  pinMode(motorPinb2, OUTPUT);
  pinMode(motorPinb3, OUTPUT);
  pinMode(motorPinb4, OUTPUT);
}

void loop()
{
    // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:

  if (buttonState == HIGH) {

    if(flag) {
        clockwise();
        flag = false;
//    delayMicroseconds(motorSpeed);

    }

  delay (10);

  } else {

    flag = true;
  }

//  for (int i = 0; i < stepsPerRev * 2; i++)

//  {

//    clockwise();

//    delayMicroseconds(motorSpeed);

//  }

//  for (int i = 0; i < stepsPerRev * 2; i++)

//  {

//    anticlockwise();

//    delayMicroseconds(motorSpeed);

//  }

//  delay(1000);

}

 

void clockwise()

{

  stepCounter ++;

  if (stepCounter >= numSteps) stepCounter = 0;

  setOutput(stepCounter);

}

// 

//void anticlockwise()

//{

//  stepCounter--;

//  if (stepCounter < 0) stepCounter = numSteps - 1;

//  setOutput(stepCounter);

//}

// 

void setOutput(int step)

{
  digitalWrite(motorPin1, bitRead(stepsLookup[step], 0));
  digitalWrite(motorPin2, bitRead(stepsLookup[step], 1));
  digitalWrite(motorPin3, bitRead(stepsLookup[step], 2));
  digitalWrite(motorPin4, bitRead(stepsLookup[step], 3));
  digitalWrite(motorPinb1, bitRead(stepsLookup[step], 0));
  digitalWrite(motorPinb2, bitRead(stepsLookup[step], 1));
  digitalWrite(motorPinb3, bitRead(stepsLookup[step], 2));
  digitalWrite(motorPinb4, bitRead(stepsLookup[step], 3));

}

Se que para sacar la distancia media tengo que usar el teorema de pitágoras,

Puedes explicarte por favor? dónde ves el triangulo?

Buenas noches, gracias por responder y disculpas por no haber explicado el formato de plotter que estoy utilizando, me estoy basando en este diseño:

Son 2 stepper en las puntas con poleas gt2 de 16 dientes más su respectiva correa, en el centro hay un dispositivo con un marcador y un servo que se activa para despegar o pegar el marcador a la pizarra.

El triangulo se forma entre los 2 stepper y el dispositivo del marcador.

He visto varios tutoriales de plotters pero todos los que vi utilizan librerias o programas ya terminados lo cual no me permite interiorizarme o entender el codigo.

Denuevo gracias a todo aquel que le heche un vistazo y/o tenga un consejo.

Ah claro… que ciego estoy!!
Porque quieres reinventar la rueda? Digo no usar librerías es una perdida de TU tiempo.

Manejar steppers es fácil.

Busca una buena guia y luego adapta la guia a tu necesidad.

Creo que esta guia te puede servir mucho, vi el video pero ahora veo el instructables.