Secuenciador led acionado por un pulsador

Hola a todos, me llamo Jose Luis, nuevo en el foro y nuevo con arduino.

Mi consulta es:

Estoy intentando construir un secuenciado leds (en la practica real serán relés).

con el pulsador en cero (nivel bajo) los leds irán encendiéndose superior y apagandose el inferior hasta completar los cinco.

con el pulsador en uno (nivel alto) hará la secuencia inversa empezando por el Quinto.

Condiciones de la secuencia:

  • prevalece la secuencia de ascenso (con ausencia de señal en el pulsador encenderá 1 al 5)

  • en cualquier momento (al principio, en el trascurso o al final) se podrá accionar el pulsador, esta acción iniciara el decremento hasta el apagado total de los leds.

-si dejamos de actuar el pulsador iniciará de nuevo la secuencia en aumento desde el led en donde se encontraba en la acción del decremento

  • los cambios estarán temporizados.

-cuando pulso el pulsador y desaparece el 1 no debería tener respuesta de descenso (algo que no he conseguido). El tiempo de reacción no se resetea, y esta acción sigue adelante.

Como veis es un programa de novato. Posiblemente el mismo se podrá simplificar y depurar de tal manera que el funcionamiento del programa sea seguro y por ende la aplicación también.

Saludos y Gracias

secuenciador led.txt (3.32 KB)

Edita y haz visible el código usando etiquetas.

Lee las Normas del foro.

Hola pepeluluis, bienvenido al foro. En principio tu código es muy redundante. Por ejemplo para saber si esta presionado el boton basta un solo if() y no es necesario preguntar nuevamente en cada secuencia.

Luego si quieres hacer una "secuencia" no es necesario comparar todos los LED basta que se cumple la secuencia anterior para activar la siguiente ya que tu quieres dicha secuencia, salvo la primera vez claro.

Tampoco tiene ningún sentido poner delay() antes de la accion, pon una sola al final y ya.

void loop(){
   //ATIVADO RELES.
   if (digitalRead(boton)==LOW){
      if (digitalRead(led1)==HIGH){
          digitalWrite(led1, LOW);
          digitalWrite(led2, HIGH);
          ...
      }

   //APAGADO RELES
   }else{
      ....
   }
   delay(3000);
}