Mi programa se detiene indefinidamente sin tener delay

Buenas noches... bueno mi gente, abre un hilo en el foro porque ya no logro dar con el error que me esta ocurriendo mientras se ejecuta mi programa...
Estoy haciendo una rampa móvil para estacionamiento. Dicha rampa, mientras se mantenga pulsado el botón de bajar, debería dar la orden de bajar y se enciende un led hasta que detecte el limite de bajada. Si se deja de pulsar el botón de bajar mientras la rampa esta en movimiento, debería detenerse, esperar unos segundos, y volver a subir. Cuando detecta el limite superior, se detiene, tiene una pausa de unos segundos, y luego vuelve al loop.

este es parte de mi codigo:

void bajar(){

if (digitalRead (botonBajar)==HIGH){
  if(digitalRead (finalBajar)==HIGH){
    Serial.println ("Se pulso Bajar");
    digitalWrite (motorBajar,HIGH);
    digitalWrite (semaforoRojo, HIGH);
    bajar();
  }
  digitalWrite (motorBajar,LOW);
  while (digitalRead (sensorAbrir)== HIGH){
    digitalWrite (barreraAbrir,HIGH);
    Serial.println ("Abrir barrera");
    delay(1000);
  }
  digitalWrite (barreraAbrir, LOW);
  digitalWrite (semaforoRojo, LOW);
  digitalWrite (semaforoVerde, HIGH);
  delay(6000);
  digitalWrite (semaforoVerde, LOW);
  return;
}
else {
  Serial.println ("No se mantuvo pulsado Bajar");
  digitalWrite (motorBajar, LOW);
  digitalWrite (semaforoRojo, HIGH);
  delay (2000);

  while (digitalRead (finalSubir)==HIGH){
  Serial.println ("Esperar rampa arriba");
  digitalWrite (motorSubir,HIGH);
  }
  digitalWrite (motorSubir, LOW);
  digitalWrite (semaforoRojo, LOW);
  digitalWrite (semaforoVerde, HIGH);
  delay (6000);
  digitalWrite (semaforoVerde, LOW);
}
}

Mi problema esta en que, cuando dejo de pulsar el boton, se inicia el else, pero solo hasta:

  digitalWrite (semaforoVerde, HIGH); del else

Alli mi programa se queda congelado.

Por otro lado, si mantengo el boton pulsado, detecta el limite inferior, mi programa se detiene aqui:

  digitalWrite (semaforoVerde, HIGH);

pero del if

Alguno sabe porque mi programa se detiene alli?

probé con un mega y un nano y me pasa lo mismo

No pude determinar en donde esta el error, pero lo que te sugiero es que uses una maquina de estados para resolver tu necesidad en este caso particular, con el "switch case" debería salir fácil, el código te queda mas sencillo para debuggear, porque lo que presumo es que estas fijando condicionales para que determine en que estado esta y tomar las decisiones en función de eso, con el switch case ya sabes en que estado esta y que decisiones puedes tomar con cuales condiciones para saltar entre los distintos estados.

Espero haberme explicado, éxito!

Postea todo el código y no una parte del mismo asi podemos evaluarlo convenientemente.

Hi,
Una sugerencia para mi los while puede causar que el programa se quede en un loop ya que estan esperando por la condicion de un switche. Si el switche no responde estonces se queda esperando en el while. Entonces para saber si se esta quedando en uno de estos haz un print cuando sale de los while asi puedes determinar si se esta quedando en uno de los while esperando por la condicion del switche.

Buenas tardes... Bueno le explico brevemente el proyecto que estoy realizando y el problema que estoy teniendo...

Estoy haciendo una rampa movil para estacionamiento. Dicha rampa consta de 2 limites (superior e inferior) y 3 botones (subir, bajar y stop).

El boton de Stop es de tipo attchInterrupt, y al ser pulsado, debe poner en pausa el programa con un delay de 3 segundos y si la rampa no esta arriba, debe dar la orden de subir, y cuando detecta el limite superior, se detiene todo, y empieza otra pausa de 3 segundos...

Toda la maniobra lo hace a la perfeccion, el problema que tengo es el delay, que al ser de tipo attchInterrupt, no se ejecuta.

Como podria detener el programa al ser pulsado el boton?

Logre resolver el problema... Resulta que, despues de terminar el void bajar, sin pulsar el boton, volvia a entrar al void bajar, ya que dentro de esa misma funcion personalizada, llamaba a bajar();

Moderador:
Un doble posteo es una de las peores faltas en este foro.
La razón es que alguien que te responda en otro hilo tuyo se tomará el tiempo de darte una buena respuesta sin saber lo que se ha escrito en este otro tema. Lo que constituye una perdida de tiempo para ambos foreros.
Por respeto a ellos es que te pido que no lo vuelvas a hacer y que leas las normas.
Este item será movido a tu otro hilo.

Normas del foro