Mover Stepper con joystick comun

Quiero controlar un stepper utilizando un joystick de estos de ps2 que venden para arduino, el problema es que no consigo que haga lo que yo quiero…

Tenia por ahi este codigo que era de otro proyecto el cual utilizaba un mando de ps3, lo he intentado amoldar a este nuevo proyecto, pero solo consigo que el motor gire todo el rato en una direccion incluso sin mover nada el joystick…

Estoy utilizando un driver TB6600, un motor NEMA17 de 1,7 amps alimentado por un transformador de 2,5 amps y este joystick:

//DIR- y PUL- a GND de arduino
//DIR+ a PIN 3 de arduino
//PUL+ a PIN 2 dea arduino

#include <AccelStepper.h>

#define DIR_PIN  3
#define STEP_PIN 2

AccelStepper StepperIZQ(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);

#define MAX_SPEED 3000.0
#define MIN_SPEED 0.0

int izqX, izqY;
float izqVel, derVel;

#define joystick  A0

void setup() {
  StepperIZQ.setMaxSpeed(MAX_SPEED);
  StepperIZQ.setAcceleration(1000.0);
  StepperIZQ.setSpeed(MIN_SPEED); // lo pongo a 0
  
  Serial.begin(9600);   // Inicializamos  el puerto serie  
}

void loop() {

  izqX = analogRead(joystick);
  izqVel = mapf(izqX, 0, 255, -MAX_SPEED, MAX_SPEED);

  if (izqVel <= 100 && izqVel >= -100)
  izqVel = MIN_SPEED;

  StepperIZQ.setSpeed(izqVel);
  StepperIZQ.runSpeed();

  Serial.println(izqVel);

}

float mapf(int x, int in_min, int in_max, float out_min, float out_max)  {
  return (float) (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Hi,
Adjunto un link de una persona que hizo un projecto igaul al que tu quires hacer para tu consideracion. Los comentarios son que trabaja de primera intencion. El problema es que es in ingles. Tu edcides si quires tratarlo.

Gracias tauro0221 pero ya mire ese codigo y muchos otros de la red y ninguno me sirve ya que o bien no utilizan los mismos driver, o los mismos motores que los mios..

Por cierto, he capturado los valores que muestra por serial el joystick..

En reposo:

Adelante:

Atras:

La pregunta es ¿Son validos esos valores para que los procese la funcion que estoy utilizando en el codigo?

A ver si algun experto puede iluminarme un poco..

Pues ya esta solucionado… he encontrado este codigo y funciona perfectamente… lo pongo por si le puede servir a alguien:

#include <AccelStepper.h>

const int Joystick = A0; 

const int StepPin = 2;  
const int DirPin = 3; 
long SpeedX, ValueX, MapX;  

const int MaxSpeed = 2000; 
const int MinSpeed = 0; 
const float Aceleration = 50.0; 
 
const int Treshold = 50; 
long TresholdUp, TresholdDown;  
 
boolean MoveX, EnableX; 
 
AccelStepper MotorX(AccelStepper::DRIVER, StepPin, DirPin);
 
void setup() {
  SpeedX = 0;
  EnableX = false;

  TresholdDown = (MaxSpeed / 2) - Treshold;
  TresholdUp = (MaxSpeed / 2) + Treshold;
 
  MotorX.setMaxSpeed(MaxSpeed);
  MotorX.setSpeed(MinSpeed);
  MotorX.setAcceleration(Aceleration);
}
 
void loop() {
  ValueX = analogRead(Joystick);
  MapX = map(ValueX, 0, 1023, MinSpeed, MaxSpeed);
  MotorControl(MapX);
}
 
void MotorControl(long mapX) {
 
  if (mapX <= TresholdDown) {
    SpeedX = -map(mapX, TresholdDown, MinSpeed,   MinSpeed, MaxSpeed);
    MoveX = true;
  } else if (mapX >= TresholdUp) {
    SpeedX = map(mapX,  MaxSpeed, TresholdUp,  MaxSpeed, MinSpeed);
    MoveX = true;
  } else {
    SpeedX = 0;
    MoveX = false;
  }
 
  if (MoveX) {
    MotorX.setSpeed(SpeedX);
    MotorX.run();
  } else {
    MotorX.stop();
  }

}

Hi,
Muchas gracias por reportar como lo solucianaste para aquellos que tengan el mismo problema en un futuro cercano. Asi todos nos beneficiamos.