Hola, buenas tardes.
Estoy intentando hacer un proyecto con arduino nano, dos botones, un driver a4899 y un nema, tengo que aclarar que soy un novato en esto. Me gustaría saber si el código estaría bien. La idea es llevar una diana al sitio de disparo con un botón y traerla con otro.
Necesito mover un numero determinado de pasos en una dirección cuando pulse un botón y que al pulsar el otro botón lo haga en otra dirección. La idea es que entre cada secuencia de pasos el driver se apague. Os dejo el código por aquí. gracias
#define VELOCIDAD 1700
int steps = 11; //Posición del pin contador de pasos
int direccion = 9; //Posición del pin dirección
int reset = 10; //Posición del reset
int button1 = 3; //Posicion de tiro
int button2 = 4; // Posicion de cambio
int pasos = 2000; //Cantidad de pasos a meter
// La rutina de inicialización
void setup() {
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(steps, OUTPUT);
pinMode(direccion, OUTPUT);
pinMode(reset, OUTPUT);
}
// La rutina que se repite cíclicamente
void loop() {
//De primeras damos señal de que el motor esté apagado. Esperamos 100ms y lo encendemos. Colocamos la dirección a HIGH.
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);
//Se repite un bucle hasta final de carril.
for (int i = 0; i<pasos; i++) //Equivale al numero de vueltas (200 es 360º grados) o micropasos
if (digitalRead(button1) == HIGH);
{
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.
}
//Volvemos a dar señal de que el motor esté apagado. Esperamos 100ms y lo encendemos. Esta vez la dirección es LOW, avanzará en la dirección opuesta.
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);
for (int i = 0; i<pasos; i++)//Equivale al numero de vueltas (200 es 360º grados) o micropasos
if (digitalRead(button2) == HIGH);
{
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.
}
}