buenas noches foro estoy empezando en esto de arduino especialmente en los motores a pasos, actualmente planeo ejecutar un programa con un arduino uno, un motor nema 17 y un pololulu, la idea es que por medio de 3 pulsadores el motor se mueva hacia la derecha(1er pulsador) hacia la izquierda (segundo pulsador) y un movimiento continuo izquierda-derecha al presionar el tercer pulsador y que al volverlo a presionar este movimiento pare, hasta ahora solo he podido hacer que al presionar un pulsador gire automaticamente izquierda-derecha pero no puedo pararlo al volver a presionar ese pulsador he estado buscando e intente hacerlo como si fuera el encendido de un led pero no me salio, este es mi còdigo:
#define VELOCIDAD 2000
int pulsador = 0;
int estado = 0 ;
int entrada = 4;
int steps = 2;
int direccion = 3;
int reset = 9;
int pasos = 800;
// the setup routine runs once when you press reset:
void setup() { // initialize the digital pin as an output.
pinMode(4, INPUT);
pinMode(steps, OUTPUT);
pinMode(direccion, OUTPUT);
pinMode(reset, OUTPUT);
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
pulsador = digitalRead(entrada);
if (pulsador == HIGH) {
estado=1-estado; }
if( estado ==1){
digitalWrite(reset, LOW); //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
delay(100);
digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
digitalWrite(direccion, HIGH);
digitalWrite(13,HIGH);
digitalWrite(12,LOW);
for (int i = 0; i<pasos; i++) //Equivale al numero de vueltas (200 es 360º grados) o micropasos
{
digitalWrite(steps, HIGH); // This LOW to HIGH change is what creates the
digitalWrite(steps, LOW); // al A4988 de avanzar una vez por cada pulso de energia.
delayMicroseconds(VELOCIDAD); // Regula la velocidad, cuanto mas bajo mas velocidad.
}
digitalWrite(reset, LOW); //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
delay(100);
digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
digitalWrite(direccion, LOW);
digitalWrite(13,LOW);
digitalWrite(12,HIGH);
for (int i = 0; i<pasos; i++) //Equivale al numero de vueltas (200 es 360º grados) o micropasos
{
digitalWrite(steps, LOW); // LOW to HIGH hace que el motor avance ya que da la orden
digitalWrite(steps, HIGH); // al A4988 de avanzar una vez por cada pulso de energia.
delayMicroseconds(VELOCIDAD); // Regula la velocidad, cuanto mas bajo mas velocidad.
}
}
else{
digitalWrite(reset, LOW); //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
delay(100);
digitalWrite(reset, LOW); //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
digitalWrite(direccion, LOW);
digitalWrite(13,LOW);
digitalWrite(12,LOW);
}
}
ojalà puedan ayudarme con esta duda les estare agradecido mientras seguire buscando e intentando, de antemano les agradezco su tiempo , saludos