EJERCICIO El coche fantástico

Descripción del ejercicio

Hemos denominado este ejemplo como "El coche fantástico" en memoria de ka serie de TV de los años 80 en la que el famoso David Hasselhoff tenía una máquina de IA conduciendo su Pontiac. El coche estaba equipado con gran cantidad de LED-s de todos los tamaños posibles que realizaban efectos parpadeantes.

De esta manera hemos decidido, con el objetivo de aprender programación secuencial y buenas técnicas para programar la placa E/S, sería interesante usar el coche fantástico como una metáfora.

Este ejemplo hace uso de 6 LED-s conectados a los PIN 2 a 7 de la placa mediante resistencias de 220 Ohmios. El primer código de ejemplo hace parpadear a los LED en secuencia de uno en uno, utilizando sólo las funciones digitalWrite(pinNum,HIGH/LOW) y delay(time). El segundo ejemplo muestra como usar una secusncia de control for(;;;) para hacer lo mismo, pero en menos líneas de código. El tercer y último ejemplo se centra en el efecto visual de apagar y encender los LED-s de una forma más suave.

Elementos necesarios:

  • 6 LED-s.
  • 6 resistencias de 220 Ohmios.
  • Una placa protoboard.
  • Cables para realizar las conexiones.

Esquema

Ejemplo para los fan de David Hasselhoff

Código fuente

Ejemplo 1

/* El coche fantástico 1

 * ---------------------
 *
 * Basicamente una extensión del LED parpadeante.
 *
 *
 * (cleft) 2005 K3, Malmo University
 * @author: David Cuartielles
 * @hardware: David Cuartielles, Aaron Hallborg
 */

 int pin2 = 2;                         // PIN-es de los LED
 int pin3 = 3;
 int pin4 = 4;
 int pin5 = 5;
 int pin6 = 6;
 int pin7 = 7;
 int timer = 100;                      // Temporizador

void setup(){

  pinMode(pin2, OUTPUT);               // Configuración de los PIN-es como salida
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin7, OUTPUT);

}

void loop() {

   digitalWrite(pin2, HIGH);           // Enciende y apaga secuencialmente los LED-s
   delay(timer);
   digitalWrite(pin2, LOW);
   delay(timer);

   digitalWrite(pin3, HIGH);
   delay(timer);
   digitalWrite(pin3, LOW);
   delay(timer);

   digitalWrite(pin4, HIGH);
   delay(timer);
   digitalWrite(pin4, LOW);
   delay(timer);

   digitalWrite(pin5, HIGH);
   delay(timer);
   digitalWrite(pin5, LOW);
   delay(timer);

   digitalWrite(pin6, HIGH);
   delay(timer);
   digitalWrite(pin6, LOW);
   delay(timer);

   digitalWrite(pin7, HIGH);
   delay(timer);
   digitalWrite(pin7, LOW);
   delay(timer);

   digitalWrite(pin6, HIGH);
   delay(timer);
   digitalWrite(pin6, LOW);
   delay(timer);

   digitalWrite(pin5, HIGH);
   delay(timer);
   digitalWrite(pin5, LOW);
   delay(timer);

   digitalWrite(pin4, HIGH);
   delay(timer);
   digitalWrite(pin4, LOW);
   delay(timer);

   digitalWrite(pin3, HIGH);
   delay(timer);
   digitalWrite(pin3, LOW);
   delay(timer);

}

Ejemplo 2

/* El coche fantástico 2

 * ---------------------
 *
 * Reduciendo las líneas de código usando un for(;;).
 *
 *
 * (cleft) 2005 K3, Malmo University
 * @author: David Cuartielles
 * @hardware: David Cuartielles, Aaron Hallborg
 */

 int pinArray[] = {2, 3, 4, 5, 6, 7};             // Define el array de pines
 int count = 0;                                   // Contador
 int timer = 100;                                 // Temporizador

void setup(){

  for (count=0;count<6;count++) {                 // Configuramos todas los PIN-es de golpe
    pinMode(pinArray[count], OUTPUT);
  }

}

 void loop() {                                   // Enciende y apaga secuencialmente los LED-s
  for (count=0;count<6;count++) {                // utilinzado la secuencia de control for(;;)
   digitalWrite(pinArray[count], HIGH);          // Recorrido de ida
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer);
  }
  for (count=5;count>=0;count--) {
   digitalWrite(pinArray[count], HIGH);          // Recorrido de vuelta
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer);
  }

}

Ejemplo 3

/* El coche fantástico 3

 * ---------------------
 *
 * Este ejemplo se centra en el efecto visual.
 *
 *
 * (cleft) 2005 K3, Malmo University
 * @author: David Cuartielles
 * @hardware: David Cuartielles, Aaron Hallborg
 */

 int pinArray[] = {2, 3, 4, 5, 6, 7};           // PIN-es
 int count = 0;                                 // Contador
 int timer = 30;                                // Temporizador

void setup(){

  for (count=0;count<6;count++) {               // Configuramos todas los PIN-es de golpe
    pinMode(pinArray[count], OUTPUT);
  }

}

void loop() {

  for (count=0;count<5;count++) {               // Enciende los LED creando una estela visual
   digitalWrite(pinArray[count], HIGH);
   delay(timer);
   digitalWrite(pinArray[count + 1], HIGH);
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer*2);
  }
  for (count=5;count>0;count--) {
   digitalWrite(pinArray[count], HIGH);
   delay(timer);
   digitalWrite(pinArray[count - 1], HIGH);
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer*2);
  }

}