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
}
}