Problema al integrar el codigo del driver TB6600

Hola, me gustaria que me ayudaran a integrar este código de un motor stepper controlado por un driver tb6600 al código de un ascensor controlado por arduino. Les paso el codigo del driver y el del ascensor:

#include <Stepper.h> //Importamos la librería para controlar motores paso a paso
 
#define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso
 
// Ponemos nombre al motor, el número de pasos y los pins de control
Stepper stepper(STEPS, 9, 10, 11, 12); //Stepper nombre motor (número de pasos por vuelta, pins de control)

int voc = 2;

//Definicion sensores
int sensor0=6;
int sensor1=7;
int sensor2=8;

//Definicion botones de llamada
int boton0=3;
int boton1=4;
int boton2=5;

int b2 = 0;
int b1 = 0;
int b0 = 0;


void setup () {
  Serial.begin(9600);
  stepper.setSpeed(30);
  pinMode(sensor0,INPUT);
  pinMode(sensor1,INPUT);
  pinMode(sensor2,INPUT);
  pinMode(boton0,INPUT);
  pinMode(boton1,INPUT);
  pinMode(boton2,INPUT);
  pinMode(voc,OUTPUT);
}


void loop () {
digitalWrite(voc,LOW);
int s0, s1, s2;

lecturasensores (&s0, &s1, &s2);

if (s0 == 1) {
  
  b1 = digitalRead(boton1);
  b2 = digitalRead(boton2);
  
  if (b1 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s1 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(10);
    }
    stepper.step(35);
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
  
  if (b2 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s2 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(10);
    }
    stepper.step(30);
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
}

if (s1 == 1) {
  
  b0 = digitalRead(boton0);
  b2 = digitalRead(boton2);
  
  if (b0 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s0 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(-10);
    }
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
  
  if (b2 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s2 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(10);
    }
    stepper.step(30);
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
}

if (s2 == 1) {
  
  b0 = digitalRead(boton0);
  b1 = digitalRead(boton1);
  
  if (b0 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s0 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(-10);
    }
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
  
  if (b1 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s1 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(-10);
    }
    stepper.step(-20);
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
}
}

void lecturasensores (int *s0,int *s1,int *s2) {


int e0, e1, e2;


//lectura y muestra de datos de los sensores
  e0=digitalRead(sensor0);
delay(5);
  e1=digitalRead(sensor1);
delay(5);
  e2=digitalRead(sensor2);
delay(5);


//Filtrado de datos analogicos a digitales

if  (e0==HIGH)
    *s0=1;
else
    *s0=0;
if  (e1==HIGH)
    *s1=1;
else
    *s1=0;
if  (e2==HIGH)
    *s2=1;
else
    *s2=0;
}

Este es el del driver:

int PUL=7; //Pin para la señal de pulso
int DIR=6; //define Direction pin
int EN=5; //define Enable Pin
void setup() {
  pinMode (PUL, OUTPUT);
  pinMode (DIR, OUTPUT);
  pinMode (EN, OUTPUT);
  digitalWrite(EN,HIGH);

}

void loop() {
 
  digitalWrite(DIR,LOW);
  for (int i=0; i<400; i++)    //Forward 1600 steps
  {
    digitalWrite(PUL,HIGH);
    delayMicroseconds(400);
    digitalWrite(PUL,LOW);
    delayMicroseconds(400);
  }
  delay(100);
  digitalWrite(DIR,HIGH);
 
  for (int i=0; i<400; i++)   //Backward 1600 steps
  {
    digitalWrite(PUL,HIGH);
    delayMicroseconds(400);
    digitalWrite(PUL,LOW);
    delayMicroseconds(400);
  }
}

Tienes básicamente 3 pasos a seguir

  1. incluir librerías, constantes y variables globales sin repetir.
  2. setup() Idem a 1) todo lo que no se repita. Un solo Serial.begin y todas las inicializaciones que necesarias 1 sola vez.
  3. Loop() acá se debe ser criterioso.
    En principio los dos loops completos, esperando que no haya delays porque siempre genera problemas.
    Cosas que funcionan en 1 código no lo harán en el nuevo con ambos funcionando.
    Donde mas se ve, es cuando un código tiene pulsadores y el otro no. Los delays detienen al micro y los pulsadores demorarán en reaccionar hasta que se complete el delay. Por eso mejor olvidarse que existe delay porque solo genera problemas.

Esto es algo que te va a dar problemas

  for (int i=0; i<400; i++)    //Forward 1600 steps
  {
    digitalWrite(PUL,HIGH);
    delayMicroseconds(400);
    digitalWrite(PUL,LOW);
    delayMicroseconds(400);
  }
  delay(100);

porque tienes 400 uS x 400 = 160000 uS = 160mS mas 100mS = 260 mS luego otra vez

for (int i=0; i<400; i++)   //Backward 1600 steps
  {
    digitalWrite(PUL,HIGH);
    delayMicroseconds(400);
    digitalWrite(PUL,LOW);
    delayMicroseconds(400);
  }

400 x (400 + 400) = 320mS
Total tienes 320 +260 = 580mS parece poco pero es medio segundo.
Justamente en el primer código tienes pulsadores

  b1 = digitalRead(boton1);
  b2 = digitalRead(boton2);

y multiplicidad de delay() lo que es una formula para el fracaso.

Solución ir a Documentacion, estudiar como se usa millis() y como se lo emplea en una máquina de estados.

Aviso: nose mucho de arduino relacionado con los codigos, espero que me ayuden

Yo lo que quiero hacer es añadir el código del driver TB6600 que controla el motor stepper con el que tengo actualmente para controlar el ascensor

El codigo del ascensor lo copie de este video: Ascensor de 3 plantas controlado con Arduino - YouTube

Le quite el puente H L293D y lo cambie por el driver TB6600

Que tiene que ver el primer programa que usa stepper con el driver TB6600?
Lo que quieres hacer es un reemplazo?

Hola, sii, lo quiero reemplazar con el tb6600, osea suprimir el código del l293d y añadir el tb6600 a ese mismo, nose si me entiendes?

El tb6600 es un driver para motores grandes de ese hablamos?
O sea, lo usarás en un ascensor de verdad?

Hola, si, lo probé en un nema 23 y funciona muy bien. Lo usaré para este proyecto, no es un ascensor de verdad, es de maqueta. Funciona con 12V

Ya hice una rutina que no es bloqueante o sea que permite que corra todo sin detener procesos. Me falta tiempo y te doy un código que puede funcionar. Tengo un día complicado. Espera al final del dia a ver si puedo terminarlo.

Esta es la rutina que no bloquea tu código, funciona asi.
Hace lo mismo que hace la tuya y mientras no haya completado los 400 pasos devuelve un LOW o false pero cuando termina devuelve un HIGH o True

bool drivert6600(bool tmpDIR, int pasos) {
  static int tmpPasos = 0;
  bool status = false;
  static bool tmpDIRAnt = false;

  if (tmpDIR != tmpDIRAnt) // solo se ejecuta 1 vez
      digitalWrite(DIR, tmpDIR);
  tmpDIRAnt = tmpDIR;
  
  switch(estado) {
    case 0: digitalWrite(PUL,HIGH);
            startMicros = micros();
            estado = 1;
            break;
    case 1: if (micros() - startMicros > 400UL) {
                digitalWrite(PUL,LOW);
                estado = 2;
            }
            break;
    case 2: if (micros() - startMicros > 400UL) {
                if (++tmpPasos> pasos)
                    status = true;
                estado = 0;
            }
            break;

  }
  return status;
}

No tengo tiempo de adaptarlo a tu programa asi que solo hazlo sin usar delay() y va a funcionar.
Recuerda.. si llamas a

drivert6600(LOW, 400) ;

Le dices lo mismo que en este caso

  digitalWrite(DIR,LOW);
  for (int i=0; i<400; i++)    //Forward 1600 steps
  {
    digitalWrite(PUL,HIGH);
    delayMicroseconds(400);
    digitalWrite(PUL,LOW);
    delayMicroseconds(400);
  }

Pero no se bloquea o sea.. hace lo que indique el switch case y devuelve 0 si no termino y 1 si terminó.
Eso te permite estar atento a switches de final de carrera, a pulsaciones de las personas etc.

Lo añado al void loop?, tendria que añadir algo al void setup y a las definiciones?

No lo añadas asi nomas porque hay que modificar el código usando una máquina de estados para que todo siga fluyendo sin frenarse (sin delays)

Máquina de estados te refieres a S1, S2,etc.. no?. Estoy bloqueado, agradecería que me ayudaras a adaptar el código que me diste al proyecto. Pero cuando puedas o cuando tengas un rato libre

No amigo, ve a documentación y lee un tutorial sobre máquina de estados.

Alguien me podría echar una mano? Lo agradecería mucho

Hola, me gustaría sustituir el driver l293d por el tb6600, lo que pasa es q nose como añadirlo al código que tengo actualmente, he intentado probar con varios pero no me funciona. Les dejo el código y un esquema abajo, actualmente por defecto funciona con el driver l293d. El codigo se trata de una maqueta de ascensor que funciona con arduino uno

#include <Stepper.h> //Importamos la librería para controlar motores paso a paso
 
#define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso
 
// Ponemos nombre al motor, el número de pasos y los pins de control
Stepper stepper(STEPS, 9, 10, 11, 12); //Stepper nombre motor (número de pasos por vuelta, pins de control)

int voc = 2; //ALARMA

//Definicion sensores
int sensor0=6; //SENSOR PARADA PISO 0
int sensor1=7; //SENSOR PARADA PISO 1
int sensor2=8; //SENSOR PARADA PISO 2

//Definicion botones de llamada
int boton0=3; //BOTON PULSADOR PISO 0
int boton1=4; //BOTON PULSADOR PISO 1
int boton2=5; //BOTON PULSADOR PISO 2

int b2 = 0;
int b1 = 0;
int b0 = 0;


void setup () {
  Serial.begin(9600);
  stepper.setSpeed(30);
  pinMode(sensor0,INPUT);
  pinMode(sensor1,INPUT);
  pinMode(sensor2,INPUT);
  pinMode(boton0,INPUT);
  pinMode(boton1,INPUT);
  pinMode(boton2,INPUT);
  pinMode(voc,OUTPUT);
}


void loop () {
digitalWrite(voc,LOW);
int s0, s1, s2;

lecturasensores (&s0, &s1, &s2);

if (s0 == 1) {
  
  b1 = digitalRead(boton1);
  b2 = digitalRead(boton2);
  
  if (b1 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s1 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(10);
    }
    stepper.step(35);
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
  
  if (b2 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s2 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(10);
    }
    stepper.step(30);
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
}

if (s1 == 1) {
  
  b0 = digitalRead(boton0);
  b2 = digitalRead(boton2);
  
  if (b0 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s0 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(-10);
    }
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
  
  if (b2 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s2 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(10);
    }
    stepper.step(30);
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
}

if (s2 == 1) {
  
  b0 = digitalRead(boton0);
  b1 = digitalRead(boton1);
  
  if (b0 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s0 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(-10);
    }
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
  
  if (b1 == HIGH){
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
    while (s1 == 0){
      lecturasensores (&s0, &s1, &s2);
      stepper.step(-10);
    }
    stepper.step(-20);
    stepper.step(0);
    digitalWrite(voc,HIGH);
    delay(400);
    digitalWrite(voc,LOW);
    delay(100);
    digitalWrite(voc,HIGH);
    delay(300);
    digitalWrite(voc,LOW);
  }
}
}

void lecturasensores (int *s0,int *s1,int *s2) {


int e0, e1, e2;


//lectura y muestra de datos de los sensores
  e0=digitalRead(sensor0);
delay(5);
  e1=digitalRead(sensor1);
delay(5);
  e2=digitalRead(sensor2);
delay(5);


//Filtrado de datos analogicos a digitales

if  (e0==HIGH)
    *s0=1;
else
    *s0=0;
if  (e1==HIGH)
    *s1=1;
else
    *s1=0;
if  (e2==HIGH)
    *s2=1;
else
    *s2=0;
}

Ya tienes abierto un tema exactamente igual, estás haciendo doble posteo y no está permitido.

Saludos