domingo, 23 de junio de 2013

Arduino Tutorial 4: El coche fantástico

Siguiendo con nuestras prácticas de arduino , hoy quiero preparar una práctica bastante habitual que se conoce conmunmente como el coche fantástico. Básicamente consiste en iluminar una secuencia de leds rápidamente para así lograr el efecto que hacía el famoso coche "kitt".




Con esto espero lograr que adquiramos un mayor manejor de las opciones de programación que presenta arduino y voy a hablaros de la importancia que tiene el espacio que ocupa un programa. También quiero que nos acostumbremos a manejar variables y bucles de manera habitual, para así pasar rápidamente a trabajar con otros actuadores en próximas prácticas.

¿Como conseguimos nuestro objetivo?
Bueno bien, nosotros vamos a utilizar 6 leds en paralelo y les vamos a conectar una resistencia en serie de 220 ohmios(rojo-rojo-marrón segun podemos ver  Aquí

El montaje físico de la placa quedaría tal que así:

Aunque yo no lo he hecho, no os olvideis de conectar con un cable la mitad superior con la inferior.

Vemos que utilizamos una salida digital para cada LED. Podemos tomar dos opciones: O asignar a cada led una variable y declararla como pin, o englobar en un vector todas las variables, haciendo el programa mucho más resumido. Veamoslo de cada una de las maneras:


Vemos que es una simple repetición de introdución de variables, declaración de salidas y puesta en encendido-apagado. Esta sería una manera de programar simple, pero muy extensa, la propia por la que un programador se llevaría las manos a la cabeza. Esta bien que a la hora de ensayar nuestras ideas hagamos este tipo de chapuzas, pero a la hora de mostrar un programa debe estar ser de una forma más estructurada.

He dejado indicado en la imagen lo que ocupa el programa (1364 bytes) porque quiero que luego lo comparemos con el que pienso mostrar a continuació.


Bien este programa mucho más resumido utiliza los bucles for y los vectores. Ahora quiero explicar un poco lo que son los vectores para los que no hayas tenido ocasión de verlos en programación. Cuando introducimos un vector (led[]) estamos introduciendo una variable con x posiciones, que en este caso se va a interpretar como las salidas del led en el bucle for.

Vemos despues en "setup" que introduzco un bucle for con la variable n. Esta variable n,(en este caso) es la que nos va a indicar la posición del vector en el que nos encontramos, vease, si n=0 , la posición del vector sera 0, es decir el pin 2, cuando acabe el bucle for, se ejecutará la orden n++, que como podemos deducir aumenta el valor de n en una unidad. Luego al siguiente bucle, n será igual a 1, y la posición que estaremos indicando como salida será la del vector 1, (pin 3). Este proceso se repite hasta que n=6, momento en el que el bucle termina.

Esta es una manera muy útil de declarar todas las salidas del arduino en una  sola línea de código, cosa que hace nuestro archivo más pequeño

Después en "loop" mediante un bucle similar, vamos a ir dando la orden de encender todas las luces de nuestros LED, y posteriormente deberíamos añadir otro bucle que fuera en orden descendente es decir for(n=6;n>0;n--)  que fuera apagando todas las luces del vector.

Vemos que el archivo al final ocupa 1338 bytes, son 26 menos que en el ejemplo anterior en unas pocas líneas de código. Cuando nos ocupemos de ejecutar códigos más largos realizar este tipo de bucles de manera sistemática se hará necesario.

Os dejo con el vídeo demostración para que lo probeis vosotros mismos