# 2led un botón

**URL:** <https://forum.arduino.cc/t/2led-un-boton/428340>\
**Category:** Software\
**Created:** [January 2, 2017, 1:04pm UTC](https://forum.arduino.cc/t/2led-un-boton/428340 "2017-01-02T13:04:54Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![manolito29](https://avatars.discourse-cdn.com/v4/letter/m/c68b51/32.png) [@manolito29](https://forum.arduino.cc/u/manolito29)\
**Post date:** [January 2, 2017, 1:04pm UTC](https://forum.arduino.cc/t/2led-un-boton/428340/1 "2017-01-02T13:04:54Z")

</div>

Necesito ayuda!! he estado intentanto hacer un proyecto con arduino en el que dandole a un boton se encienda primero un led(se apago solo) y al darle otra vez se encienda el 2º led(se apaga solo) y cuando el boton no este pulsado esten los dos apagados.

He conseguido el efecto de que se apague solo pero me falta que primero sea uno y luego otro ya que se encienden los dos a la vez cuando le doy al botón en vez de primera vez que pulso uno y segunda vez otro.  
Alguien que me pueda ayudar?  
Este es el código:

const int pinled1 = 11; // declaración de variables  
const int pinled2 = 5; // declaración de variables  
const int pinbtn = 3; // declaración de variables  
int pin;  
int x = 0;  
int encender = 0; // Si esta encendido el led  
int anterior = 0; //Pulsación anterior  
int estado = 0; //El estado actual del botón  
void setup()  
{  
pinMode(pinled1, OUTPUT);  
pinMode(pinled2, OUTPUT);  
pinMode(pinbtn, INPUT);  
}

void loop()  
{  
{  
estado = digitalRead(pinbtn); //comprobamos el estado

if(estado == HIGH)//comprobamos si el anterior estaba pulsado y el de ahora  
{digitalWrite(pinled1, HIGH);  
}  
else{  
digitalWrite(pinled1, LOW);  
}  
{  
estado = digitalRead(pinbtn); //comprobamos el estado

if(estado == HIGH)//comprobamos si el anterior estaba pulsado y el de ahora  
{digitalWrite(pinled2, HIGH);  
}  
else{  
digitalWrite(pinled2, LOW);  
}  
}  
}  
}

---

<div class="post-metadata">

**Author:** ![cas6678](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cas6678/32/1013044_2.png) [@cas6678](https://forum.arduino.cc/u/cas6678)\
**Post date:** [January 2, 2017, 1:38pm UTC](https://forum.arduino.cc/t/2led-un-boton/428340/2 "2017-01-02T13:38:09Z")

</div>

Hola,

Te recomiendas que leas algo acerca del "rebote" en un pulsador porque a medida que vayas poniendo mas codigo iras viendo como su intervencion te produce cosas raras que no esperas.

Basicamente se trata de que al pulsar, (o al dejar de pulsar), el cambio de LOW a HIGH y visceversa no es unico. En medio se producen unos cuantos LOW-HIHG-LOW-HIGH-LOW, etc., aunque tu no los aprecies, pero tu codigo si lo detectara.

Una vez dicho esto para lo que tu quieres puedes agregar:

Una variable POR EJEMPLO del tipo Byte, donde inicialmente valga "1". Luego en el if que preguntas si btn es HIGH tambien preguntate si la variable es "1" y en caso afirmativo enciende el led 1 y guarda "2" en la variable.

Luego otro if donde te preguntes si btn es HIGH y tambien si la variable es "2" y en caso afirmativo enciende el led 2 y guarda "1" en la variable de manera que este lista para el proximo ciclo.

Cuando btn sea LOW apaga ambos.

En resumen la nueva variable guardar el numero del siguiente led a encender, y se encendera ese y solo ese.

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [January 2, 2017, 2:20pm UTC](https://forum.arduino.cc/t/2led-un-boton/428340/3 "2017-01-02T14:20:24Z")

</div>

Estas usando dos veces el mismo botón para comandar dos LEDs?

```cpp
  estado = digitalRead(pinbtn); //comprobamos el estado

  if(estado == HIGH)//comprobamos si el anterior estaba pulsado y el de ahora
  
  //..... y luego repites!!!
  estado = digitalRead(pinbtn); //comprobamos el estado

  if(estado == HIGH)//comprobamos si el anterior estaba pulsado y el de ahora

```

Entonces la secuencia debe ser otra.

```cpp
  // antes de setup define
  bool estado; //El estado actual del botón
  bool estadoAnt = false;
  bool valor = false;
  bool estadoLed1 = false, estadoled2 = false;
  unsigned long start;

  estado = digitalRead(pinbtn); //comprobamos el estado
  if (estado && estadoAnt) {
      valor = !valor;
      if (valor) 
          estadoLed1 = 0;
      else
          estadoLed2 = 0;
      start = millis()+1000; // cambia 1000 mseg = 1 seg por el valor que desees
  }  
  estadoAnt = estado;

  if (valor) 
      enciendoLed1();
  else 
      enciendoLed2();

```

Bueno con esto resuelves la situación general de que con cada pulsación cambias el control sobre el led que funcionará.  
una de las funciones led sería así

```cpp
void enciendoLed1() {
    switch(estadoLed1) {
        case 0: digitalWrite(pinled1, HIGH);
                estadoLed1 = 1;
                break;
        case 1: if (millis() > start) {
                    digitalWrite(pinled1, LOW);
                    estadoLed1 = 2;
                }
                break;
        default: break;
    }
}

```

La segunda rutina es igual y te la dejo a ti.

---

<div class="post-metadata">

**Author:** ![manolito29](https://avatars.discourse-cdn.com/v4/letter/m/c68b51/32.png) [@manolito29](https://forum.arduino.cc/u/manolito29)\
**Post date:** [January 3, 2017, 1:50pm UTC](https://forum.arduino.cc/t/2led-un-boton/428340/4 "2017-01-03T13:50:20Z")

</div>

De donde te sacas enciendoLed1 y 2 ya que me da error.

if (valor)  
enciendoLed1();  
else  
enciendoLed2();

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [January 3, 2017, 7:57pm UTC](https://forum.arduino.cc/t/2led-un-boton/428340/5 "2017-01-03T19:57:10Z")

</div>

No has visto al final que te cree la rutina enciendoLed1 y luego te dije que TU hagas enciendoLed2 con los datos correspondientes?

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 7, 2021, 12:24am UTC](https://forum.arduino.cc/t/2led-un-boton/428340/6 "2021-05-07T00:24:58Z")

</div>

Closed on May 7, 2021, 12:24am UTC


