Motor paso a paso; inversión de giro ,parada por botones y potenciometro

Hola.
Aqui con otro pequeño proyecto que consiste en mover un motor paso a paso con tres botones, uno para giro izquierda, otro para derecha y un tercero para parada.
el código ya esta casi completo y digo casi completo porque me sucede que no me invierte el sentido de giro cuando aprieto los botones, siempre me gira en el mismo sentido, también solo se activa el motor cuando lo tengo pulsado, si dejo de pulsar se detiene, luego esta el botón de parada, que cuando lo pulso el motor se detiene, pero después al pulsar cualquier botón de giro este no hace nada y tengo que resetear el arduino para que vuelva a funcionar.
Decir que estoy utilizando un driver DM556 con todas las conexiones puestas tanto de PUL como de DIR, aún tengo que introducirle el pin de EN, para habilitar una parada de emergencia.
El potenciometro es para regular la velocidad
Os dejo el código.
gracias


#include <Stepper.h>

const int stepsPerRevolution = 7400;  // cambia esto para ajustar el número de pasos por revolución de tu motor


// inicializa la librería stepper en los pines 8 a 11:
Stepper myStepper(stepsPerRevolution, 8,9,10, 11);
// 8= pul+  11= pull-
//9= dir+   10= dir-

int stepCount = 0;  // número de pasos que ha dado el motor

int buttonPind = 2;
int buttonPini = 3;
int stopPin = 4;

bool stopped = false;  // variable que indica si el motor está detenido o no
//unsigned long buttonPressTime;  // tiempo en el que se presionó el botón
//const unsigned long buttonPressDuration = 200;  // duración en milisegundos que se mantendrá el motor girando
void setup() {
  
  pinMode (buttonPind, INPUT_PULLUP);
  pinMode (buttonPini, INPUT_PULLUP);
  pinMode (stopPin, INPUT_PULLUP);
}

void loop() {

  // lee el estado del botón:
  int buttonStated = digitalRead(buttonPind);
 // si se presiona el botón, arranca el motor si estaba detenido:
  if (buttonStated == LOW & stopped) {  // si se presiona el botón, arranca el motor si estaba detenido:
 stopped = false;  // indica que el motor ya no está detenido
  }
  // si el motor no está detenido, lo hace girar:
  if (buttonStated == LOW && !stopped) {
    // lee el valor del sensor:
    int sensorReading = analogRead(A0);
    // lo mapea a un rango de 0 a 100:
    int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
    // establece la velocidad del motor:
    myStepper.setSpeed(motorSpeed);
    // da un paso de 1/100 de revolución:
    myStepper.step(stepsPerRevolution / 300);
  }
  int buttonStatei = digitalRead(buttonPini);
 // si se presiona el botón, arranca el motor si estaba detenido:
  if (buttonStatei == LOW && stopped) {
    stopped = false;  // indica que el motor ya no está detenido
  }
  // si el motor no está detenido, lo hace girar:
  if (buttonStatei == LOW && !stopped) {
    // lee el valor del sensor:
    int sensorReading = analogRead(A0);
    // lo mapea a un rango de 0 a 100:
    int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
    // establece la velocidad del motor:
    myStepper.setSpeed(motorSpeed);
    // da un paso de 1/100 de revolución:
    myStepper.step(- stepsPerRevolution / 300);
  }
  int stopButtonState = digitalRead(stopPin);
  // si se presiona el boton se para el motor
  if (stopButtonState == LOW) {
    // parada de motor
    myStepper.setSpeed(0);
    myStepper.step(0);
    stopped = true;  // indica que el motor está detenido
   
  }
}

El problema es que el estado de movimiento del motor se pierde al final de cada ejecución de loop()

gracias por responder, intento comprender
lo del giro lo he podido solucionar, pero sigo teniendo el mismo problema, al dejar de presionar cada boton de giro ,se para.
el giro lo he solucionado.
edito:
lo he solucionado poniendo positivo directo a PUL+

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.