Encender un juego de leds mientras se mantiene presionado un pulsador

Hola es mi primera vez en el foro, así que no estoy seguro de si publique esto en el lugar correcto.
Bueno el caso es que soy nuevo en este mundo del Arduino y la programación, por lo cual mi conocimiento es bastante bajo.
Ayer andaba experimentando con algunos juegos de leds y botones por que me llego la idea de diseñar un secuencia de leds que solo funcione mientras mantenga presionado un pulsador y cuando el pulsador deje de ser presionado el juego de leds deje de funcionar inmediatamente.
Llevo casi un día intentado realizar dicho proyecto y lo único que obtengo es que al presionar el pulsador se ejecute la secuencia de luces completar incluso si dejo de presionar el pulsador.
Pido ayuda para resolver este proyecto ya que conocer la solución me ayudaría mucho en otros proyectos similares que tengo pensado diseñar.
Se los agradecía de mucho.

acá esta mi código inicial

int L0=0;
int L1=1;
int L2=2;
int L3=3;
int L4=4;
int L5=5;
int L6=6;
int L7=7;
int pulsador=13;
int estado;

void setup()
{
pinMode(L0, OUTPUT);
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(L4, OUTPUT);
pinMode(L5, OUTPUT);
pinMode(L6, OUTPUT);
pinMode(L7, OUTPUT);

pinMode(pulsador, INPUT);

}

void secuencia()
{
digitalWrite(L0, HIGH);
delay(1000);
digitalWrite(L2, HIGH);
delay(1000);
digitalWrite(L4, HIGH);
delay(1000);
digitalWrite(L6, HIGH);
delay(1000);
digitalWrite(L1, HIGH);
delay(1000);
digitalWrite(L3, HIGH);
delay(1000);
digitalWrite(L5, HIGH);
delay(1000);
digitalWrite(L7, HIGH);
delay(1000);
}

void apagado()
{
digitalWrite(L0, LOW);
digitalWrite(L1, LOW);
digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);
digitalWrite(L5, LOW);
digitalWrite(L6, LOW);
digitalWrite(L7, LOW);
}

void loop()
{
estado = digitalRead(pulsador);
if(estado == HIGH)
{
secuencia();
}
else
{
apagado();
}
}

no use delay (), está bloqueando loop()
estudiar este ejemplo de "blink without delay" y el uso de millis()

Hola David, contanos como vienen tus avances con el proyecto!.

También soy nuevo en el foro y todo lo que tengo para aprender aquí es enorme, :wink:

Saludos -

Moderador:
tu hilo fue movido a Software porque no reúne las condiciones para ser un proyecto.
Lee los dos hilos que estan en la sección proyectos.
Además, el código no esta posteado como lo indican las normas. Asi que edita usando </> para que se visualice correctamente.
Observa otros hilos para entender de lo que hablo o simplemente leelo en las normas como ya te he pedido.

Mas allá de lo que @J-M-L dice tiene razón, tu problema esta en como accionas las secuencias.

int L0 = 0;
int L1 = 1;
int L2 = 2;
int L3 = 3;
int L4 = 4;
int L5 = 5;
int L6 = 6;
int L7 = 7;
int pulsador = 13;
int estado, estadoAnterior = true;
bool cambio= false;

void setup()
{
  pinMode(L0, OUTPUT);
  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(L5, OUTPUT);
  pinMode(L6, OUTPUT);
  pinMode(L7, OUTPUT);

  pinMode(pulsador, INPUT);

}

void loop()
{
  estado = digitalRead(pulsador);
  if (estado && !estadoAnterior)  { // cada cambio de LOW a HIGH modifica a cambio
      cambio = !cambio;             
  }

  if (cambio) {
    secuencia();
  }
  else  {
    apagado();
  }
  estadoAnterior = estado;
}

void secuencia()
{
  digitalWrite(L0, HIGH);
  delay(1000);
  digitalWrite(L2, HIGH);
  delay(1000);
  digitalWrite(L4, HIGH);
  delay(1000);
  digitalWrite(L6, HIGH);
  delay(1000);
  digitalWrite(L1, HIGH);
  delay(1000);
  digitalWrite(L3, HIGH);
  delay(1000);
  digitalWrite(L5, HIGH);
  delay(1000);
  digitalWrite(L7, HIGH);
  delay(1000);
}

void apagado()
{
  digitalWrite(L0, LOW);
  digitalWrite(L1, LOW);
  digitalWrite(L2, LOW);
  digitalWrite(L3, LOW);
  digitalWrite(L4, LOW);
  digitalWrite(L5, LOW);
  digitalWrite(L6, LOW);
  digitalWrite(L7, LOW);
}

Esta modificación hará que funcione, pero te recomiendo que leas como se usa millis() y olvida el uso y abuso de delay().

Moderador:
Bienvenido al foro Arduino.
Los códigos deben postearse usando etiquetas.
Lee las normas del foro y edita tu post incial.
Por favor, no dejes pasar esta advertencia que te hago.

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