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).
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
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!
Me has salvado un proyecto muchas gracias
ResponderBorrarUna consulta, para instalar un LED más, tendría que agregar un bool state 3?
ResponderBorrar