Proyecto con Arduino: ‘fading’ de LEDs

Como primer proyectito de arduino quiero hacer un circuito que encienda y apague de forma gradual una serie de LEDs cuando se pulse un botón.

El circuito es muy simple: una parte para el botón, y otra para los LEDs. El arduino leerá el estado del botón, y dependiendo del valor que lea hará cosas en el circuito de los diodos.

Como los LEDs están en paralelo, se pueden poner varios sin problemas con la alimentación del arduino (poniendo resistencia de 220 ohmios delante).

esquematico del circuito con un interruptor y tres LEDs

Ahora vamos por el código:

int led = 5;
int boton = 3;
int brillo = 0;


void setup() {
Serial.begin(9600);
pinMode(boton, INPUT);
pinMode(led, OUTPUT);
}


void loop() {
bool estado_pulsador = digitalRead(boton);
if(estado_pulsador == false){
if(digitalRead(led) == false){
for (int brillo = 0; brillo < 255; brillo++) {
analogWrite(led,brillo); delay(20);
}
digitalWrite(led,HIGH);
// delay(250);
}
else {
for (int brillo = 255; brillo > 0; brillo--) {
analogWrite(led,brillo);
delay(10);
}
digitalWrite(led,LOW);
// delay(250);
}
}
}

 

Sobre el código:

El programa lee el puerdo de entrada del botón de forma cíclica. Si se pulsa el botón (se pone a 0 – o false – la entrada del puerto 3), se comprueba si el puerto de la salida de voltaje de los LEDs (el 5) está a cero o a cinco voltios. Y dependiendo de lo que lea, lo pone en el estado contrario usando analogWrite.

El digitalWrite que he puesto después de cada bucle solo es para asegurarme de que el puerto va a estar a HIGH o a LOW cuando se haga la lectura. No sé si son necesarias pero yo las voy a dejar ahí.

Las dos líneas comentadas: delay(250) es necesaria para evitar dobles pulsaciones: si un loop acaba antes de “terminar de pulsar”, el arduino lo leerá como una pulsación nueva. Y da igual lo rápido que se pulse, los ciclos de reloj de un procesador son más rápidos que un humano.

Pero hay que tener cuidado con no pasarse con el tiempo del delay, porque si metes demasiado puede pasar que el arduino no lea una pulsación porque aún esté ejecutando la anterior.

En mi código, con delay(10)  dentro del bucle “parece” que no hace falta meter más retardo fuera. Pero podéis añadir retardo fuera del bucle si usáis el código y os parece que lo necesita, por supuesto.

También podéis jugar con el delay dentro del bucle para hacer que el LED se encienda más o menos rápido.

 

Así me quedó todo el circuito

 

************************************************************

Espero que esta entrada pueda ser de utilidad, y si no, como siempre, aquí tenéis un gato para compensar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.