[Solucionado] 2 push button y 2 leds con timers

Hola buen días a todos

Tengo un código en el cual, tengo 2 botones y 2 leds, al presionar un botón se enciende el primer led y se queda encendido 10 segundos después de esto el led se apaga, y al presionar el segundo botón se enciende el segundo led.

El problema que tengo, que cuando presiono un botón y se enciende el led, y en el transcurso de los 10 segundos presiono el otro botón, este no hace nada y no funciona hasta que se acaben los 10 segundos que estará encendido el led que se acaba de encender.

Alguien me podría instruir para solucionar el problema por favor, lo que quiero que haga es que se pueda presionar un botón y encender el led y al presionar el otro botón se encienda el otro led y apague el primero aunque no haya estado los 10 segundos encendido.

Codigo:

int button_UP = 2;     // boton led 1
int button_DOWN = 3;     // boton led 2
int ledUP =  12;      // led 1
int ledDOWN =  13;      // led 2
int btn_UP;
int btn_DOWN;

    

void setup() {
         
 
      pinMode(button_UP, INPUT);        
      pinMode(button_DOWN, INPUT);    
     
      
      pinMode(ledUP, OUTPUT);
      pinMode(ledDOWN, OUTPUT);
      
}

void loop() {
btn_UP = digitalRead(button_UP);
btn_DOWN = digitalRead(button_DOWN);


  
 if (btn_UP == HIGH) {    
    digitalWrite(ledUP, HIGH);
    digitalWrite(ledDOWN, LOW);
    delay(10000);
  } else {    
    digitalWrite(ledUP, LOW);
      
  }

  if (btn_DOWN == HIGH) {    
    digitalWrite(ledDOWN, HIGH);
    digitalWrite(ledUP, LOW);
    delay(10000);
  } else {    
    digitalWrite(ledDOWN, LOW);

  }}

Saludos :smiley:

Debes usar millis() y no usar delay. Delay detiene la ejecución del programa hasta que se cumple ese retardo de tiempo.
Asi que por mas que presiones nunca vera el cambio hasta que termine el 1er delay, tal como lo has explicado.
mira el ejemplo del IDE ,BlinkWithoutdelay.ino.

No es fácil reemplazarlo. Hay un tutorial en documentacial de max_saeta, búscalo.

Ya lo solucione xD
Gracias!!!

Dejo el código por si alguien pasa por lo mismo :slight_smile:

const int button_UP = 2;       
const int button_DOWN = 3;    
const int ledUP = 12;       
const int ledDOWN = 13;     


unsigned long interval = 10000;
unsigned long startTime;
byte lastPress;
//
void setup() 
{                
 pinMode(ledUP, OUTPUT);
 pinMode(button_UP, INPUT);  
  pinMode(ledDOWN, OUTPUT);
 pinMode(button_DOWN, INPUT);
}
//
void loop()
{
 byte pressed = digitalRead(button_UP);
 if (pressed)
 {
   if (pressed != lastPress)
   {
     digitalWrite(ledUP, HIGH);
     digitalWrite(ledDOWN, LOW);
     startTime = millis();
   }
 }
 lastPress = pressed;
 if (digitalRead(ledUP))
 {
   if (millis() - startTime >= interval)
   {
     digitalWrite(ledUP, LOW);
   }
 }

byte pressed2 = digitalRead(button_DOWN);
 if (pressed2)
 {
   if (pressed2 != lastPress)
   {
     digitalWrite(ledDOWN, HIGH);
     digitalWrite(ledUP, LOW);
     startTime = millis();
   }
 }
 lastPress = pressed2;
 if (digitalRead(ledDOWN))
 {
   if (millis() - startTime >= interval)
   {
     digitalWrite(ledDOWN, LOW);
   }
 }

 
}

Muy bien hecho. Ponle solucionado ahora al título.