Industrial Arduino Millis() vs Delay()

Diferencia entre las funciones de Tiempo Arduino
28 de septiembre de 2020 por
Industrial Arduino Millis() vs Delay()
Boot & Work Corp. S.L., Marti Guillem Cura

Índice

Your Dynamic Snippet will be displayed here... This message is displayed because you did not provided both a filter and a template to use.

Introducción de Arduino Industrial Millis () vs Delay ()

Es muy común en proyectos de automatización industrial programar secuencias repetitivas en intervalos de tiempo específicos. El lenguaje de programación Arduino proporciona algunas funciones de tiempo para controlar la Placa Arduino de tu controlador PLC industrial y realizar cálculos para lograr esto. Las funciones más habituales para trabajar con tiempo son millis () y delay (), pero ¿cuáles son las diferencias entre ellas y qué función es mejor utilizar en cada caso? En este post hablaremos de ellos y veremos algunos ejemplos de su uso.

Requisitos para programar las funciones Millis () y Delay ()

Para ejecutar este programa necesitaremos lo siguiente:

Funciones de Tiempo de Millis () y Delay ()

Usando Arduino IDE hay funciones definidas por defecto como funciones de tiempo como Millis () y Delay (). Te permitirán controlar.

Millis (función)

En primer lugar, necesitas saber lo que hace la función millis(). Devolverá el número de milisegundos que han pasado desde que la placa PLC Arduino comenzó a ejecutar el programa actual. Tiene un límite de tiempo de aproximadamente 50 días, después de este tiempo, se desbordará y volverá a cero. Si el programa necesita ejecutarse por más tiempo que esto, puede ser necesario un contador adicional. Si se necesita una cantidad de tiempo más precisa, hay una función llamada micros(), que tiene la misma funcionalidad que la función millis() pero trabaja con microsegundos.

Delay (función)

Por otro lado, la función delay() detendrá el programa durante una cantidad específica de milisegundos que habrás especificado en los parámetros. Aunque es fácil utilizar esta función, tiene la desventaja de que se puede realizar cualquier otra acción durante su uso. Si se necesita una cantidad de tiempo más precisa, existe una función llamada DelayMicroseconds(), que tiene la misma funcionalidad que Delay() pero trabaja con microsegundos.

Delay vs Millis (función)

La primera diferencia que puede ver es que millis () no tiene parámetro pero devuelve la cantidad de tiempo que ha pasado; mientras que delay () requerirá la cantidad de milisegundos que queremos para pausar el programa pero no devolverá nada.

Aunque ambas funciones funcionarán con milisegundos y podrían utilizarse para controlar el tiempo, a diferencia de millis(), el delay() es una función de bloqueo. Una función de bloqueo es una función que impide que un programa haga algo más hasta que esa tarea haya sido completada. Esto significa que al usar delay() no puedes ejecutar ninguna otra tarea durante el tiempo que hayas especificado.

¿Qué función debería usar?

Ambas funciones pueden utilizarse en la mayoría de casos, pero a veces una es mejor que la otra. Por ejemplo, si quieres imprimir un mensaje cada 5 segundos sin ninguna otra condición, ambas pueden funcionar perfectamente:

Ejemplo de Millis()

 unsigned long time;
void setup() {
  Serial.begin(9600);
}
void loop() {
  time = millis();
  Serial.println("Hello World");
  while(millis() < time+5000);
}

Ejemplo de Delay()

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println("Hello World");
  delay(5000);
}

En caso de que sólo quieras realizar una acción, delay() es más fácil de implementar como puedes ver en los códigos anteriores. Sólo tendrás que llamar a la función, bloqueando el programa durante el tiempo especificado.

Por otro lado, quieres realizar una operación en la que se deben ejecutar dos acciones simultáneamente, no debes utilizar la función delay() ya que el programa se bloqueará en su llamada. Si esto ocurre, ambas acciones se detendrán el tiempo especificado en la función. En un programa complejo, esto podría causar un error significativo que podría estropearlo. En el siguiente ejemplo, puedes ver cómo parpadear dos LEDs usando diferentes intervalos de tiempo con la función millis(). Usando la función delay() no será posible hacerlo simultáneamente.

¿Te ha gustado este post?

Si buscas más información sobre los controladores industriales y la automatización con Arduino, te recomendamos que leas sobre Temporizador de aumento/disminución.


Buscar en nuestro blog

Industrial Arduino Millis() vs Delay()
Boot & Work Corp. S.L., Marti Guillem Cura 28 de septiembre de 2020
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>