Encendido alternado de dos LED con Arduino

El siguiente proyecto consta de dos LED con encendido alternado, es decir, mientras uno está encendido, el otro debe estar apagado y viceversa. Uno de los dos LED tiene un período de encendido tres veces mayor. En este ejemplo se encenderá 3 segundos el LED conectado al pin 11 y solo 1 segundo el conectado al pin 12.

Es un montaje sencillo. El cátodo de cada LED va conectado a los pines digitales 11 y 12 del Arduino (no importa el orden, ya depende de cuál quieres que prenda por más tiempo que el otro) y el ánodo se conecta por medio de una resistencia de 330Ω a Vcc (alimentación de 5V que suministra el Arduino). Lo anterior significa que el LED debe encender cuando el pin 11 o 12 tiene como salida un nivel bajo de voltaje (LOW = 0V).


Imagen del montaje


img.png

Código


int led_1 = 11; //Led (1) para 3 seg
int led_2 = 12; //Led (2)para 1 seg
bool state_1 = LOW; //Estado led_1
bool state_2 = HIGH; //Esatdo led_2

/*
 * Variables auxiliares para intervalo
 * Tiempo
 */
unsigned long previousMillis = 0; 
unsigned long previousMillis_2 = 0;    

void setup() {
  /*Salida¨*/
  pinMode(led_1, OUTPUT); 
  pinMode(led_2, OUTPUT);
  /* LOW (led encendido) HIGH(led apagado)*/
  digitalWrite(led_1 , state_1); 
  digitalWrite(led_2 , state_2);
}


void loop() {
  unsigned long currentMillis = millis();
  /*
   * Intervalo de 3 segundos para encender y apagar led_1
   */
  if(currentMillis - previousMillis >= 3000){
      previousMillis = currentMillis;
      if(state_1){
        state_1 = LOW; // Led_1 ON
        state_2 = HIGH;// Led_2 OFF  
      }else{
        state_1 = HIGH;  // Led_1 OFF
        state_2 = LOW;   // Led_2 ON
      }
       digitalWrite(led_1, state_1);
       digitalWrite(led_2, state_2);
    }

    unsigned long currentMillis_2 = millis(); 
    /*
   * Intervalo de 1 segundo para encender y apagar led_2
   */
    if(currentMillis_2 - previousMillis_2 >= 1000){
      previousMillis_2 = currentMillis_2;
      if(state_2){
        state_2 = LOW;  // Led_2 ON
        state_1 = HIGH; // Led_1 OFF
      }else{
        state_2 = HIGH; // Led_2 OFF
        state_1 = LOW;  // Led_1 ON
      }
       digitalWrite(led_1, state_1);
       digitalWrite(led_2, state_2);
    }
}

la función Millis() retorna el número de milisegundos desde que el Arduino comenzó a correr el programa. 

Como se puede notar, con la condición if(currentMillis - previousMillis >= intervalo) se enciende y se apaga el LED. Esta condición depende del valor que retorna Millis() y se guarda en la variable currentMillis. Mientras no se cumpla el intervalo asignado un LED permanecerá encendido y el otro apagado según sea el caso. Este código se encarga de hacer retardos sin necesidad de usar la función delay(). 

¡Si te ha gustado no olvides compartir!

Comentarios

  1. Me has salvado un proyecto muchas gracias

    ResponderBorrar
  2. Una consulta, para instalar un LED más, tendría que agregar un bool state 3?

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Compuertas lógicas en Arduino

Manejo display 7 segmentos empleando Arduino

Lógica combinacional empleando Arduino y álgebra de Boole