Arduino Motor passo tb6600 sensores fim de curso

Olá pessoal, sou extremamente iniciante em Arduíno e programação.

Eu estou iniciando um projeto para automatizar uma fresadora.

será apenas 1 motor
já que o processo da fresadora é fazer com que a mesa dela se movimente apenas no sentido de ida e volta.

Os produtos que já possuo são o seguinte.

1 Arduino Uno
1 Motor Nema 23 19kgf cm 4.2A (8Fios)
1 Drive TB6600 (hy-div268n-5A)
1 Fonte chaveada 24v 5A 120W
2 Crash Sensor (botões de fim de curso)
1 Push button (botão iniciar o processo)

A ligação do motor fiz em séria buscando mais Torque do que velocidade.

As conexões estão feitas, tudo ok.

O que eu estou quebrando a cabeça agora é na programação;

O que eu desejo que aconteça é o seguinte.

Ao pressionar o Botão quero que o Motor gire sentido horário, até tocar o fim de curso.
Ao tocar o crash sensor(fim de curso) ele deve girar no sentido anti-horário, até que o outro crash sensor (Inicio de curso) seja alcançado, e ficar parado até que o Puch Buttom (botão iniciar) seja pressionado.

Segue o código que tenho até o momento.

//Arduino Sketch based on easy driver
int dirpin = 8;
int steppin = 9;
int enable = 7;

int sensorFinal = 3;
int sensorInicial = 5;

void setup()
{
pinMode(dirpin, OUTPUT);
pinMode(steppin, OUTPUT);
digitalWrite(enable, LOW);

pinMode(sensorFinal, INPUT);
pinMode(sensorInicial, INPUT);

}
void loop()
{
 int i;
 int sensor = digitalRead(sensorFinal);
if (sensor == HIGH) {
 
 digitalWrite(dirpin, HIGH); // Set the direction.

}else{
   digitalWrite(dirpin, LOW); // Set the direction.
}
 delay(1);
 for (i = 0; i<1; i++) // Iterate for 4000 microsteps.
 {
 digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the "Rising Edge" so the easydriver knows to when to step.
 delayMicroseconds(2);
 digitalWrite(steppin, HIGH);
 delayMicroseconds(200); // This delay time is close to top speed for this
 } // particular motor. Any faster the motor stalls.
 
}

Desa forma o motor só gira no sentido anti-horário enquanto o fim de curso estiver pressionado.

aqui uma foto da ligação.

Os teus sensores de fim de curso tem pull-up?

O teu codigo esta feito apenas para uma direccao, logo obviamente apenas se move numa direccao.
O teu numero de passos e 1... logo o teu motor tambem nao se mexe...

O meu conselho sera em primeiro veres como controlar o motor de passo ja que claramente o codigo que tens nao e muito bom. Pesquisando um pouco chegas a bibliotecas que fazem muito do trabalho por ti. Nota que a biblioteca por vezes tem de ser a correcta para lidar com o driver e motor que tens. Mas deve ser simples de conseguir.
Nota tambem que controlar mais que um motor torna-se dificil de qualquer das formas se tiveres de coordenar movimentos. Nesse caso, e importante nunca usar funcoes de delay.

Tendo isso acertado (como controlar o motor com confianca), o codigo pode ser feito de forma simples.

Crias uma variavel para o sistema saber se foi correctamente inicializado (pode eventualmente ser evitado)...

Se a variavel for 0, o sistema tem de inicializar. Entao verificas se ambos os sensores estao desactivados e se estiverem, mandas o motor dar um numero enorme de passos ate o sensor ser activado.
Activa uma variavel a dizer que a primeira inicializacao esta feita.

Como a inicializacao nao esta completa e a primeira esta completa, tens de seguir para a segunda fase. Entao manda o motor dar uma quantidade enorme de passos ate activar o fim de curso. Muito importante, guarda o numero de passos dados para poderes mais a frente controlar a posicao do motor. E importante guardar apenas ao fazer a segunda parte da inicializacao porque assim sabes que foi feita entre dois pontos conhecidos (final ate ao inicial).

Quando o sensor de fim de curso for activado, colocas a variavel definida inicialmente a 1 (sistema inicializado) e podes usar essa variavel como um condicao juntamente com o teu push-button para inicializar o processo.

Isto nao e dificil... pode ser dificil para ti que tens pouca experiencia, mas e facil de atingir. Tenta e mete aqui o resultado e a gente vai ajudando com base no que fizeste. Eu nao tenho tempo para estar aqui a resolver o problema por ti.

Uma maneira muito boa de estruturar o programa para realizar isto e atraves duma maquina de estados ou State Machine. Valera talvez leres acerca disso se quiseres aprender algo que no final tornara o codigo mais simples de alterar e/ou adicionar funcionalidade.

Links:

http://teachmetomake.com/wordpress/arduino-tutorial-state-machine
http://playground.arduino.cc/Code/FiniteStateMachine

Bem eu pesquisei e encontrei a biblioteca AccelStepper

Achei mais fácil de utilizar até

consegui configurar o botão que ao clicar o motor gira no sentido horário até que o sensor de fim de curso seja acionado.

só não consegui ainda fazer com que ao acionar o sensor de fim de curso, ele inverta o sentido de giro até atingir o sensor de inicio de curso.

#include <AccelStepper.h>


// Define a stepper motor 1 for arduino 
// Pino de direçao Digital 8 (CW), Pino de pulso DIgital 9 (CLK)
AccelStepper stepper(1, 9, 8);
void setup()
{  
pinMode(sensorInicial, INPUT);
pinMode(sensorFinal, INPUT);
pinMode(botaoIniciar, INPUT);

  
  Serial.begin(9600);
  // Change these to suit your stepper if you want
  stepper.setMaxSpeed(2000);//1100
  stepper.setAcceleration(1100);
  //stepper.moveTo(2000); // se vividir esse valor por 200 é a quantidade de 20 voltas.
  //stepper.setSpeed(2000);
}

void loop()
{
  
    if (digitalRead(botaoIniciar)==LOW)
    {
      while (digitalRead(sensorFinal)==HIGH){
      stepper.move(200);  //nao importa o valor que eu coloque ele vai girar até que o sensor de fim de curso seja acionado.
 
      stepper.run();    
    }
    }
}

Ja pesquisaste por maquina de estados?