Parpadeo de leds mediante botones

Buenas compañeros, me surgió la problemática de hacer parpadear leds mediante pulsadores
y bien, el programa tiene que tener ciertas condicionantes.

  • Al principio todos los leds deben encontrarse encendidos
    -Si oprimo pulsador izquierdo el led izquierdo debería parpadear y al dejar de oprimirlo debería volver al estado de encendido
    -Pasaría lo mismo con el derecho.

Mi código es el siguiente.

int estadoder=0;
int estadoizq=0;

int ledder = 1;
int pulsder = 3;
int ledizq = 2;
int pulsizq = 4;

void setup() {
 pinMode (ledder, OUTPUT);
 pinMode (pulsder, INPUT);
 pinMode (ledizq, OUTPUT);
 pinMode (pulsizq, INPUT);

digitalWrite (ledder,HIGH);
digitalWrite (ledizq,HIGH);
}


void loop() 
{
  estadoizq = digitalRead(4);
  
  if(estadoizq == HIGH)
  {
  digitalWrite(2, HIGH);  
  delay(1000);                       
  digitalWrite(2, LOW);    
  delay(1000);      
    }
    else {
      digitalWrite(2,HIGH);
      }

     
  estadoder =digitalRead(3);

  if (estadoder ==HIGH)
  {
  digitalWrite(1, HIGH);  
  delay(1000);                       
  digitalWrite(1, LOW);    
  delay(1000);      
  }
  else {
    digitalWrite(1,HIGH);
    }
  }

Ahorita lo que hace es apagar ambos led cuando oprimo el botón y volverse a encender cuando lo apago
Agradecería su ayuda

nor_lemonchin:

int estadoder=0;

int estadoizq=0;

int ledder = 1;
int pulsder = 3;
int ledizq = 2;
int pulsizq = 4;

void setup() {
pinMode (ledder, OUTPUT);
pinMode (pulsder, INPUT);
pinMode (ledizq, OUTPUT);
pinMode (pulsizq, INPUT);

digitalWrite (ledder,HIGH);
digitalWrite (ledizq,HIGH);
}

void loop()
{
  estadoizq = digitalRead(4);
 
  if(estadoizq == HIGH)
  {
  digitalWrite(2, HIGH); 
  delay(1000);                     
  digitalWrite(2, LOW);   
  delay(1000);     
    }
    else {
      digitalWrite(2,HIGH);
      }

estadoder =digitalRead(3);

if (estadoder ==HIGH)
  {
  digitalWrite(1, HIGH); 
  delay(1000);                     
  digitalWrite(1, LOW);   
  delay(1000);     
  }
  else {
    digitalWrite(1,HIGH);
    }
  }




Ahorita lo que hace es apagar ambos led cuando oprimo el botón y volverse a encender cuando lo apago
Agradecería su ayuda

Hola nor,
bueno parece que comenzas con los 2 leds encendidos de acuerdo a los digitalWrite del setup cuando entras en el loop siguen asi pero si pulsas el boton izq. entra en el condicional y le das la orden de continuar encendido para luego apagarse cuando debiera ser al reves,
Trata de leer algo sobre "pulsador antirrebote" porque eso ademas puede estar jugandote una mala.
(tambien habria que ver el circuito que usas para los botones)

Saludos.

No debes doble postear hilos similares.
Acá esta el otro en Proyectos http://forum.arduino.cc/index.php?action=profile;u=1083265

Aquel hilo fue cerrado y en cuanto te notifiques será borrado.
Lee las normas del foro y por favor respeta estas advertencias.

Trata de leer algo sobre "pulsador antirrebote" porque eso ademas puede estar jugandote una mala.

No veo que tiene que ver el anti rebote con lo que se pretende hacer.
El único problema que hay es que al usar delay cada pulsación debe esperar a que termine el ciclo de parpadeo para presetar atención al estado del pulsador.

La solución es usar millis() y no utilizar delay que solo sirve para entorpecer la secuencia.

Ve a Documentación => Indice de temas tutoriales => Millis()
Y entonces podrás modificar todo usando estas función.

Te recomiendo leer también la máquina de estados porque la combinación de millis() y máquina de estados te dará la solución.