Detener un motor paso a paso

Hola, me podrían ayudar ? Mi proyecto consiste en hacer una barra de peaje mediante un motor a pasos y un sensor ultrasonico. No tuve probelmas al programar los parámetros de distancia del sensor, el problema es con el motor, creo un ciclo if para que cuando la distancia sea menor a 10cm, el motor de 512 pasos de los 2048 y se detenga, pero pasan 2 segundos y el motor sigue girando y así sucesivamente y lo que deseo es que se detenga por completo una ves haya dado los 512 pasos. Les comparto mi código, espero me puedan ayudar.

 #include <Stepper.h>
  const int pasos = 2048;
  Stepper motor(pasos, 3, 5, 4, 6);
  
  int detener = 0;
  int trig = 12;
  int echo = 11;
  int tiempo;

  int pare = 8;
  int siga = 9;

void setup() {
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);

  pinMode(pare, OUTPUT);
  pinMode(siga, OUTPUT);

}

void loop() {
  // Parametros de sensor ultrasonico
  long duracion;
  long distancia;
  
  digitalWrite(trig, LOW);
  delayMicroseconds(4);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  
  duracion = pulseIn(echo, HIGH);
  duracion = duracion/2;
  distancia = duracion/29;
  
  Serial.println(distancia);
  delay(50);

  //Si la distancia es menor que 10, la barra de peaje baja y se activa el led rojo

  if(distancia <=10){
    
    digitalWrite(pare, HIGH);  
    motor.setSpeed(10);
    motor.step(pasos/4);
    delay(2000);
    digitalWrite(pare, LOW);  
    digitalWrite(siga, HIGH); 

  }
  //Si la distancia es mayor que 10, la barra de peaje sube y se activa el led verde
  if(distancia >10){
    digitalWrite(siga, HIGH); 
    motor.setSpeed(10);
    motor.step(-pasos/4);
    delay(2000);
    digitalWrite(siga, LOW);
    

  }


}

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

¿La distancia se mueve instantáneamente de <10 cm a> 10 cm? Mientras la distancia sea <10cm, el LOOP seguirá avanzando (pasos/4).

Y disculpa como puedo hacer para que solo avance una vez mientras la distancia sea <10cm? Osea que avance 1 única vez y se detenga mientras la distancia sea <10cm.

Usa una variable para guardar el estado.
Por ejemplo

Si distancia <= 10
  Si yaAvanzo es falsa
     yaAvanzo = verdadera
     ... // lo que sigue

Si distancia > 10
  yaAvanzo = falsa
  // lo que sigue

Saludos

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