
Iniciado por
vicentincoconut
Pues eso, señores, me he metido en el apasionante mundo del Arduino(suputamadre) y estoy un poco agobiado, debo decir que no tengo ni idea de lenguaje C y todo lo que voy haciendo es por el metodo de prueba y error y leer mucho.
Al grano, estoy moviendo un motor paso a paso con un driver y me ayudo de la libreria ACCELSTEPPER para que los movimientos sean mas suaves,el funcionamiento del programa consiste en que el motor partiendo de cero va a la posicion A de ahi va a la posicion B y vuelve a A. El problema que tengo es que si durante el movimiento de A-B o de B-A pulso el paro de emergencia (seta)no hace caso hasta que no llega a su destino, me he dado cuenta que es por la funcion "runToPosition" que por lo visto es un bucle y no se como hacer que salga de ahi. Bueno si alguien os dejo el codigo y si podeis echarme una mano os lo agradecere muchisimo.
Soy novato, no os burleis mucho shurs!.
#include <AccelStepper.h>
// Defino el stepper y los pines que uso
AccelStepper stepper1(1,13,11);
#define fcretro 4
#define seta 2
#define fcavance 8
#define automatico 12
float potvel; //Variable lectura potenciometro velocidad
int potavance; //Variable lectura potenciometro posicion izquierda
int potretro; //Variable lectura potenciometro posicion izquierda
int Kauto= 0;
int manual=A5;
void setup() {
Serial.begin(9600); //iniciar puerto serie
// velocidad maxima y aceleracion
stepper1.setMaxSpeed(potvel);
stepper1.setAcceleration(8000);
pinMode(fcretro, INPUT);
pinMode(seta, INPUT);
pinMode(fcavance, INPUT);
pinMode(automatico, INPUT);
pinMode(manual,INPUT);
}
void loop() {
if (digitalRead(automatico)== HIGH) {
delay(3000);
if (digitalRead(automatico)==HIGH) {
Kauto= HIGH;}
Serial.println ("auto");}
if (digitalRead(fcavance)== HIGH || digitalRead(seta)== HIGH || digitalRead(manual)==HIGH) {Kauto=LOW; }
potvel=analogRead(A0); //Lectura potenciómetro velocidad
potvel = map(potvel, 0, 1023, 3000, 20000); //Establecemos la posicion paro en avance
stepper1.setMaxSpeed(potvel);
while (digitalRead(manual)== HIGH && digitalRead(seta)==LOW) {
Serial.println("Manual");
if (digitalRead(fcretro)==0) { potvel==0;
stepper1.move(-100);
stepper1.stop(); // Stop as fast as possible: sets new target
stepper1.run();
}
}
if (digitalRead(fcretro)== HIGH) {stepper1.setCurrentPosition(0);}
while ((Kauto)== LOW && digitalRead(seta)==LOW && digitalRead(fcretro)==LOW) {
Serial.println("noAUTOM"); //no lo uso de momento
if (digitalRead(fcretro)==0) {/*sign= -1;*/ potvel==0;
stepper1.move(-100);
stepper1.stop(); // Stop as fast as possible: sets new target
stepper1.run();
}
}
if (digitalRead(fcretro)== HIGH) {stepper1.setCurrentPosition(0);}
// Ahora empieza el ciclo AUTOMATICO
while ( (Kauto) ==HIGH && digitalRead(seta)== LOW) {
//AVANCE
potavance=analogRead(A1); //Lectura potenciómetro posicion avance
potavance = map(potavance, 0, 1023, 12500, 13524); //Establecemos la posicion paro en avance
if (digitalRead(fcavance)== HIGH || digitalRead(seta)== HIGH || digitalRead(manual)==HIGH) {Kauto=LOW; Serial.println ("fcavance"); }
stepper1.moveTo(potavance);
while (stepper1.distanceToGo() !=0 && digitalRead(seta)==LOW && Kauto== HIGH)
{
potvel=analogRead(A0); //Lectura potenciómetro velocidad
potvel = map(potvel, 0, 1023, 1800, 3500); //Establecemos la velocidad antes entre 1800 y 3500
stepper1.setMaxSpeed(potvel);
if (digitalRead(fcavance)== HIGH || digitalRead(seta)== HIGH || digitalRead(manual)==HIGH) {Kauto=LOW; Serial.println ("Kautolow"); }
stepper1.runToPosition();
}
if (digitalRead(fcavance)== HIGH || digitalRead(seta)== HIGH || digitalRead(manual)==HIGH) {Kauto=LOW; Serial.println ("Kautolow"); }
//RETROCESO
potretro=analogRead(A2); //Lectura potenciómetro posicion retroceso
potretro = map(potretro, 0, 1023, 4500, 3489); //Establecemos la posicion paro en retroceso
stepper1.moveTo(potretro);
if (digitalRead(fcavance)==HIGH) Kauto=LOW;
while (stepper1.distanceToGo()!= 0 && digitalRead(seta)==LOW && Kauto==HIGH )
{
if (digitalRead(fcavance)==HIGH) Kauto=LOW;
potvel=analogRead(A0); //Lectura potenciómetro velocidad
potvel = map(potvel, 0, 1023, 1800, 3500);
stepper1.setMaxSpeed(potvel);
if (digitalRead(fcavance)== HIGH || digitalRead(seta)== HIGH || digitalRead(manual)==HIGH) {Kauto=LOW; Serial.println ("Kautolow"); }
stepper1.runToPosition();
}
if (digitalRead(fcavance)== HIGH || digitalRead(seta)== HIGH || digitalRead(manual)==HIGH) {Kauto=LOW; Serial.println ("Kautolow"); }
}
}