02 Parpadeo sin retardo
(Blink without delay).
En el ejercicio anterior vimos el ejemplo de Sketch más sencillo que se puede hacer con
Arduino, que un
LED
parpadee controlando los intervalos de tiempo con la función delay().
La función delay() es un retardo, la placa Arduino UNO no hace otra cosa que contar los
milisegundos que le especifiquemos entre los paréntesis. En un Sketch sencillo como el del
ejercicio 1 no hay problema en tener al microcontrolador ocupado en la tarea de contar
milisegundos, pero en general serán pocas las veces que podamos permitirnos ese lujo. Lo
más normal será que además de controlar el tiempo nuestra Arduino tenga que ocuparse de
otras tareas.
Por ese motivo vamos a ver como puede Arduino controlar el tiempo que está
encendido el LED sin recurrir a la función delay() y mientras tanto queda el microcontrolador
libre para hacer otras cosas.
El ejercicio 2: Blink WithOut Delay, que figura entre los ejemplos que vienen con el IDE
(los programas que trae incorporados) de Arduino utiliza la
función millis() para controlar el
tiempo. Esta función devuelve el número de milisegundos que han transcurrido desde que se
ha encendido por última vez. Veremos la función millis() con más detalle más adelante
CÓDIGO
/* Parpadeo sin delay()
Enciende y apaga un LED conectado a un pin digital sin utilizar la función delay(). Esto significa que
otro código se puede ejecutar al mismo tiempo sin ser interrumpidopor el código que controla el
parpadeo del LED
Circuito: Un LED conectado entre el pin 13 y el pin GND.
Nota: en muchos Arduinos hay un LED en la placa conectado al pin 13, por lo que no sería necesario
un LED externo para este ejemplo.
Creado en 2005 por David A. Mellis, modificado el 8/2/2010 por Paul Stoffregen.
Este ejemplo es de dominio público*/
// las constantes no cambian. Las usamos aquípara establecer los números de los pines.
int
ledPin
=
13
;
// el número del pin conectado al LED
// variables que cambiarán de valor.
int
ledState
=
LOW
;
// ledState se usará para establecer el estado del LED
long
previousMillis
=
0
;
// almacenará la última vez que el estado del LED se actualizó
// la siguiente variable es del tipo long por que el tiempo medido enmilisegundos supera
// rápidamente al número que puede ser almacenado en unavariable del tipo int
long
interval
=
1000
;
// intervalo del parpadeo (en milisegundos)
void
setup
()
{
pinMode
(
ledPin
,
OUTPUT
);
}
// establece el pin digital como salida:
void
loop
()
{
// Aquí es donde pondríamos el código que debe ejecutarse durante todo el tiempo.
// Se comprobará si esel momento de parpadear el LED, esto es, si la diferencia entre
// el tiempo transcurrido y el tiempo en que parpadeó por última vez el LED es mayor que
// el intervalo que establecimos en la declaración de variables.
unsigned
long
currentMillis
=
millis
();
// Se toma el tiempo actual
// se comprueba si el tiempo actual menos el tiempo en que el LED cambió
// de estado por últimavez es mayor que el intervalo.
if
(
currentMillis
-
previousMillis
>
interval
){
// Si se cumple la condición se guarda el nuevo tiempo en el que el LED cambia de estado
previousMillis
=
currentMillis
;
// Y ahora cambiamos de estado el LED, si está encendido a apagado o viceversa.
if
(
ledState
==
LOW
)
ledState
=
HIGH
;
else
ledState
=
LOW
;
digitalWrite
(ledPin
,
ledState
); // Hacemos que el contenido de la variable llegue al LED
}
}
Ejercicio 2: apéndice
A estas alturas somos unos expertos en el arte de hacer que un LED se encienda o se
apague, hemos visto la estructura de un Sketch y hemos utilizado los comandos más
usuales en los ejemplos de programación de Arduino.
En este apéndice repasaremos los comandos vistos hasta ahora, su...
Regístrate para leer el documento completo.