Cómo usar millis en Arduino 5/5 (1)

Si eres nuevo con Arduino probablemente seguro que mucho tiempo en el Arduino Playground o en Internet, explorando y experimentando con los códigos que otros han escrito. A medida que ganes experiencia y empieces a escribir tus propios programas deberás entender la diferencia entre los comandos delay() y millis().

A pesar de compartir algunos puntos en común superficiales, estos dos comandos son bastante diferentes y útiles para diferentes tipos de aplicaciones. Aquí, aclararemos la diferencia y examinaremos cómo empezar a usar el comando Arduino millis() de forma efectiva.

delay() vs. millis()

Empecemos con las similitudes:

  1. Puedes utilizar los comandos delay() y milis() para regular el tiempo de las operaciones.
  2. Medimos ambos en milisegundos.

Las diferencias, sin embargo, son las que hacen que el comando millis() sea más importante y brille realmente. En pocas palabras, la diferencia principal es que el comando delay() regula el tiempo de una actividad, como por ejemplo el parpadeo de un LED, suspendiendo temporalmente casi todas las funciones de Arduino durante un tiempo específico. El comando millis(), por otro lado, basa su temporización en cambios en un temporizador que comienza en 0 y continúa avanzando, sin relación con otras actividades, luego se detiene y comienza de nuevo.

En términos prácticos, mientras que la función delay() interrumpe los otros procesos, esencialmente poniendo todo en espera, el comando millis() puede establecer el tiempo sin interrumpir otras funciones, permitiendo una especie de efecto “multitarea”.

Para un sketch muy simple, como hacer que un LED parpadee sin otra funcionalidad, el comando delay() puede ser suficiente. Después de todo, la unidad no necesita lograr nada más en el tiempo que el LED esté encendido o apagado. Sin embargo, si tu proyecto implica más “piezas móviles”, como el parpadeo del LED y la impresión periódica de un contador, necesitarás usar el comando millis() para hacerlo.

En tal caso, puedes utilizar el comando millis() para establecer que cada tarea ocurra cuando el contador alcance una cierta diferencia (como parpadear cada 500ms e imprimir cada 1500ms).

Código de ejemplo

const byte ledPin = 13; //the number of the LED pin
byte ledState = 0; //ledState used to set the LED
unsigned long previousMillis1 = 0; //will store last time LED was updated
unsigned long interval1 = 500; //interval at which to blink (milliseconds)
unsigned long previousMillis2 = 0;
unsigned long interval2 = 1500;
unsigned int counter = 0;

void setup() {
Serial.begin(19200);
delay(2000);
pinMode(ledPin, OUTPUT); //set the digital pin as output:
}

void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis1 > interval1) {
previousMillis1 = currentMillis; // save the last time I blinked the LED
//if the LED is off turn it on and vice-versa:
ledState ^= 1;
digitalWrite(ledPin, ledState);
}
currentMillis = millis();
if (currentMillis - previousMillis2 > interval2) {
previousMillis2 = currentMillis; // save the last time I printed on the serial
Serial.println(++counter);
}
}

Mirando el código anterior, que hemos desarrollado modificando ligeramente este código, puedes ver que el comando no detiene el funcionamiento total del Arduino. Por lo tanto, ambas tareas pueden ocurrir en sus propios tiempos sin interrupción.

micros() y Overflowing

Así como delay() tiene una versión de microsegundos llamada delayMicrosegundos(), millis() tiene micros(). Si necesitas una mejor definición para tu proyecto, micros() puede ser la opción que debas usar.

Sin embargo, debes tener en cuenta que micros() se desbordará después de aproximadamente 70 minutos, en comparación con los 50 días de milis(). Esto significa que los valores de retorno de las funciones comenzarán de nuevo desde cero.

Conclusión

La función delay() es un gran punto de partida, y puedes utilizarla para realizar muchas tareas sencillas. Es uno de los primeros comandos que probablemente aprenderás, pero a medida que avances y desarrolles códigos más complicados, deberías familiarizarte con el comando millis(), que te permitirá ejecutar sketches más complicados con más tareas sin las paradas que causa delay(). Para una explicación más detallada de estos comandos y sus diferencias, echa un vistazo a este post en el Foro Arduino o en el tutorial de Norwegian Creations.

Califique esto

También te puede interesar

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Pin It on Pinterest

Shares