Curso de Arduino y Robótica para automatizar tus inventos
Hasta ahora hemos visto que cuando queremos generar un retardo en Arduino, podemos usar la función delay()
Sin embargo, la función delay tiene el inconveniente de que deja al micro suspendido de actividad durante el tiempo que se le indique, por lo que durante este tiempo no atiende a la posible actividad que puedan tener sus puertos.
Por ejemplo, si se ejecuta
delay(5000);
durante cinco segundos las posibles pulsaciones de pulsadores que tengamos conectados a la placa no serán detectadas.
Si queremos realizar una espera, pero durante este tiempo monitorizar el valor de los puertos, podemos usar la función millis.
La función milis devuelve el número de milisegundos desde que la placa Arduino empezó a ejecutar el programa. Dado que el número de milisegundos suele ser una cifra muy alta, lo mejor es almacenarlo en una variable del tipo unsigned long, con lo que tendremos tiempos de espera de hasta 47 dias. Si se almacena en una variable tipo int, el tiempo de espera se reducirá hasta los 32 segundos.
Por ejemplo, el siguiente bucle espera durante cinco segundos la pulsación de una tecla. Si dicha pulsación se produce, enciende el led verde. Si no se produce, enciende el led rojo transcurridos esos cinco segundos.
#define PIN_LED_ROJO 12
#define PIN_LED_VERDE 11
unsigned long tiempo_actual;
unsigned long tiempo_final;
int verde_encendido = 0;
void setup() {
pinMode(PIN_LED_ROJO, OUTPUT);
pinMode(PIN_LED_VERDE, OUTPUT);
}
void loop() {
tiempo_actual = millis();
tiempo_final = tiempo_actual + 5000;
while (tiempo_actual < tiempo_final) {
if (digitalRead() == HIGH) {
digitalWrite(PIN_LED_VERDE, HIGH);
verde_encendido = 1;
}
tiempo_actual = millis();
}
// Cuando se acaba el tiempo, mira a ver si se ha encendido el verde
if (verde_encendido == 0) {
digitalWrite(PIN_LED_ROJO, HIGH);
}
}
Copyright © 2015 - Todos los derechos reservados - Arduino Inventor
Plantilla : OS Templates