Estrella fugaz
Este ejercicio muestra como realizar un rayo de luz, o más poéticamente, una estrella fugaz, moviendose a través de una linea de LED-s. Podremos configurar tanto la velocidad de de la estrella, así como la longitud de la cola. No es muy elegante porque la cola brilla con la misma intensidad que la estrella, y al final, parecerá como si un rayo sólido cruzase la linea de LED-s.
Esquema
¿Cómo funciona?
Hay que conectar 11 LED-s a los pines digitales de la placa a través de resistencias de 220 Ohmios tal y como se muestra en la imágen superior.
El programa comienza encendiendo LED-s hasta que llegue al número de LED-s establecido para la cola. En ese momento seguirá encendiendo LED-s hacia la izquierda (si se monta tal y como se muestra en la fotografía inferior), para mantener el movimiento de la estrella, al mismo tiempo que apaga LED-s por la derecha, para asegurarnos de que vemos la cola. De otra forma seguiría encendiendo LED-s hasta encenderlos todos. Esto ocurre cuando el tamaño de la cola es igual o mayor que el número de LED-s.
El tamaño de la cola debería ser relativamente pequeño en comparación con el número de LED-s de forma que podamos ver la estrella.
Código fuente
/* Estrella fugaz
*---------------
* Este programa es una variante del ejemplo del coche
* fantástico. Muestra mediante un loop una estrella
* fugaz que es dibujada en una linea de LED-s
* directamente conectados a la placa Arduino
*
* Puedes controlar la velocidad a la que la estrella
* se mueve gracias a una variable llamada "waitNextLed"
*
* También puedes controlar la longitud de la cola
* de la estrella a través de la variable "tail length"
*
* @author: Cristina Hoffmann
* @hardware: Cristina Hofmann
*
*/
// Variable declaration
int pinArray [] = { 2,3,4,5,6,7,8,9,10,11,12 }; // Declaración de los PIN-es mediante un array
int controlLed = 13; // LED de control
int waitNextLed = 100; // Tiempo antes de encender el siguiente LED
int tailLength = 4; // Número de LED-s que permanecen encendidos antes de empezar a apagarlos para formar la cola
int lineSize = 11; // Número de LED-s conectados (que es también el tamaño del array)
void setup() // Configuración de los PIN-es como salida digital
{
int i;
pinMode (controlLed, OUTPUT);
for (i=0; i< lineSize; i++)
{
pinMode(pinArray[i], OUTPUT);
}
}
void loop()
{
int i;
int tailCounter = tailLength; // Se establece la longitud de la cola en un contador
digitalWrite(controlLed, HIGH); // Se enciende el LED de control para indicar el inicio del loop
for (i=0; i<lineSize; i++)
{
digitalWrite(pinArray[i],HIGH); // Se encienden consecutivamente los LED
delay(waitNextLed); // Esta variable de tiempo controla la velocidad a la que se mueve la estrella
if (tailCounter == 0)
{
digitalWrite(pinArray[i-tailLength],LOW); // Se apagan los LED-s en función de la longitud de la cola.
}
else
if (tailCounter > 0)
tailCounter--;
}
for (i=(lineSize-tailLength); i<lineSize; i++)
{
digitalWrite(pinArray[i],LOW); // Se apagan los LED
delay(waitNextLed); // Esta variable de tiempo controla la velocidad a la que se mueve la estrella
}
}
@idea: Cristina Hoffmann
@code: Cristina Hoffmann
@pictures and graphics: Cristina Hoffmann
@date: 20060203 - Rennes - France