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