Está en la página 1de 6

4.

Las entradas y salidas digitales

4.2 Prctica 1: encendiendo y apagando varios leds


En esta primera prctica vamos a simular el juego de luces del famoso coche
fantstico de la serie de televisin que se hizo popular en los aos ochenta.
El algoritmo que implementaremos es el que se muestra en la figura 4.10.
Se trata de apagar y encender LED con esperas de tiempo intercaladas para
producir un efecto de movimiento de la luz que recorre estos diodos.

Figura 4.10

En cuanto al hardware que necesitamos:


Cinco diodos LED.
Cinco resistencias de 220 .
Una protoboard.
Cablecitos de conexin.
Un Arduino y un cable USB.
Conectaremos los cinco diodos LED a los pines digitales (2 al 6) a travs de
las cinco resistencias limitadoras. Examinemos ahora el sketch que debemos
escribir, guardar y subir a nuestro Arduino para comprobar su funcionamiento.
Prctica 1. Empezando a programar
/* Prctica 1 Coche fantstico */
/* Ideada mientras miraba las estrellas un da sin luna */

61

Taller de Arduino

void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
void loop()
{
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delay(500);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(500);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
delay(500);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
}

62

4. Las entradas y salidas digitales

En este programa aparecen tres funciones que hacen todo el trabajo. Las
estudiamos con detalle a continuacin. Preprate porque empezamos a programar!
pinMode (pin, mode). Esta instruccin es utilizada en la parte de
configuracin setup() y sirve para configurar el modo de trabajo de un pin,
pudiendo ser el parmetro mode como INPUT (entrada) u OUTPUT (salida). Los
terminales de Arduino, por defecto, estn configurados como entradas, por lo
tanto no es necesario definirlos en el caso de que vayan a trabajar como entradas.
Los pines configurados como entrada quedan, bajo el punto de vista elctrico,
como entradas en estado de alta impedancia.
Cuando un dispositivo tiene alta impedancia de entrada quiere decir
que consume muy poca corriente en forma directa. La impedancia es
la resistencia que presenta un dispositivo ante una seal, ya sea en su
entrada o salida. Es bueno que un dispositivo tenga alta impedancia
de entrada ya que cuando lo conectemos a algo no va tomarte una
corriente apreciable.
Estos pines tienen a nivel interno una resistencia de 20 k a las que se puede
acceder mediante software. A estas resistencias se accede de la siguiente manera:
pinMode(pin, INPUT);

// configura el pin como entrada

digitalWrite(pin, HIGH); // activa las resistencias internas

Las resistencias internas normalmente se utilizan para conectar las entradas a


interruptores. En el ejemplo anterior no se trata de convertir un pin en salida, es
simplemente un mtodo para activar las resistencias interiores. Los pines configurados
como OUTPUT (salida) se dice que estn en un estado de baja impedancia y pueden
proporcionar 40 mA de corriente a otros dispositivos. Esta corriente es suficiente para
alimentar un diodo LED, pero no es lo suficientemente grande como para alimentar
cargas de mayor consumo como rels, solenoides o motores.
digitalWrite(pin,mode). Enva al pin definido previamente como OUTPUT el
valor HIGH o LOW (poniendo en 1 o 0 la salida). Por ejemplo:
digitalWrite(pin, HIGH); // Saca por el pin un valor
HIGH (alto o 1).
digitalWrite(3, LOW);

// Saca por la patilla 3 un valor


LOW (bajo o 0).

63

Taller de Arduino

delay(milisegundos). Detiene la ejecucin del programa la cantidad de


tiempo en milisegundos que se indica en la propia funcin, de tal manera que
1000 equivale a 1 segundo.
delay(2000);

// espera 2 segundos

Ahora vamos a construir el circuito (Figura 4.11). Os recomiendo que


primero lo realicis con el software fritzing que os he mostrado al final del
captulo 1. Es una buena forma de aprender a documentar vuestros proyectos y,
sobre todo, impactar a los amigos con una excelente presentacin.

Figura 4.12

Figura 4.13

64

4. Las entradas y salidas digitales

En la figura 4.12 se puede observar el mismo circuito pero realizado en


Proteus. Como hemos visto en el captulo 1, puedo simular su funcionamiento, lo
cual es importante para asegurar que cuando lo monte en la protoboard, todo va
a ir bien. Adems, me brinda la posibilidad de ir trabajando en mis proyectos sin la
necesidad de tener un Arduino a mano.
Cuando reviso el sketch anterior me doy cuenta que tanto el algoritmo
como el programa propiamente dicho, tienen partes que se repiten
continuamente y aunque utilice la opcin copiar y pegar dentro del IDE, la
verdad es que no es muy flexible. Por ello voy a cambiar un par de cosas.
Primero introducir una variable de tipo int para poder variar el tiempo de
espera en la funcin delay(ms). Despus reemplazar el cdigo principal por otro
ms corto que use la potencia de la estructura for que vimos anteriormente. A
esto, los programadores experimentados lo llaman: optimizar el cdigo.
Prctica 1.1. Mejorando el cdigo
/* Prctica 1.1
fantstico */

Repitiendo

con

bucles

for

el

Coche

/* Vamos a hacer los cosas como si fuera un programador


avezado*/
int d = 100;
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
void loop()
{
for ( int a = 2; a < 7 ; a++ )
{
digitalWrite(a, HIGH);
delay(d);

65

Taller de Arduino

digitalWrite(a, LOW);
delay(d);
}
for ( int a = 5 ; a > 1 ; a-- )
{
digitalWrite(a, HIGH);
delay(d);
digitalWrite(a, LOW);
delay(d);
}
}

El primero de los bucles for repetir el cdigo dentro de las llaves siempre y
cuando la condicin sea verdadera. En este caso hemos utilizado una variable de
tipo entero a que comienza con el valor 2. Cada vez que se ejecuta el cdigo, se
le sumar 1 a dicha variable. El bucle continuar de esta manera mientras que a
sea menor de 7. Una vez que sea igual o mayor que 7 se sale del bucle for y vuelve
al principio de la estructura void(loop), es decir, vuelve a iniciarse otro bucle for
desde el principio. El segundo bucle for inicializa la variable a con el valor 5 que
es el penltimo LED. Ahora se va decrementando esta variable hasta llegar al valor
2 que se corresponde con el primer LED. De esta manera invertimos la secuencia
de encendido. Podis probar otros valores de la variable a para comprobar si he
cometido una errata de cdigo.
Adems, dentro de la funcin delay(ms) hemos introducido una variable de
tipo entero d que permite cambiar de manera sencilla el intervalo de espera.
Darse cuenta de que en la condicin del primer bucle for recorremos
los cinco LED ya que la variable a empieza en 2 y termina en 6.
Realiza una modificacin del sketch anterior de tal manera que
encendamos y apaguemos dos LED al mismo tiempo.

Disea un nuevo sketch que provoque varios efectos de luces con


varios leds de forma consecutiva. Imagina aplicrselo al tpico rbol
de navidad.

66

También podría gustarte