Agregar retraso en microsegundos en Arduino

Ammar Ali 12 octubre 2023
Agregar retraso en microsegundos en Arduino

Este tutorial discutirá la adición de retraso en microsegundos en el código usando las funciones delayMicroseconds() y micros() en Arduino.

Agregar retraso en microsegundos en Arduino

A veces, en Arduino, necesitamos ejecutar una tarea durante un tiempo específico. Por ejemplo, si queremos hacer parpadear un LED, tenemos que encender el LED durante un tiempo determinado, como un segundo, y luego apagarlo.

Podemos usar la función delayMicroseconds() en Arduino para agregar retraso en microsegundos. Por ejemplo, considere que tenemos que imprimir algunos números en el monitor serial en un intervalo de tiempo específico.

Si imprimimos los números directamente sin agregar un retraso, los números se imprimirán tan rápido que ni siquiera veremos el proceso porque el microcontrolador es rápido. Si añadimos algún retraso en el código, los números se imprimirán según el retraso.

Se imprimirá un número. El programa esperará el retraso y se imprimirá el siguiente número, etc.

Por ejemplo, imprimamos algunos números aleatorios en la ventana del monitor serie y agreguemos un retraso en microsegundos en el código.

Ejemplo:

long MyRnd;

void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(0));
}
void loop() {
  MyRnd = random(100);
  Serial.println(MyRnd);
  delayMicroseconds(1000);
}

Agregamos un retraso de 1000 microsegundos en el código anterior. La entrada de la función delayMicroseonds() es un entero sin signo, y el número máximo que podemos pasar dentro de la función es 16383.

Agregar un valor más grande producirá un retraso de disparo extremo en el código. La función no devolverá nada.

Podemos usar la función delay() si queremos añadir retraso en milisegundos. Podemos agregar un retraso largo usando la función delay() porque la entrada de esta función es un tipo de datos largo sin firmar.

Tenga en cuenta que si agregamos un retraso en un programa, todos los demás procesos se detendrán como las entradas del sensor, pero las interrupciones funcionarán como el PWM. Para eliminar este problema, podemos utilizar la función micros(), que se utiliza para comprobar el tiempo transcurrido en mc cuando la placa Arduino empezó a funcionar.

Por ejemplo, usemos la función micros() para verificar el tiempo en microsegundos desde que la placa Arduino comenzó a funcionar.

Ejemplo:

void setup() { Serial.begin(9600); }
void loop() {
  Serial.println(micros());
  delay(1000);
}

Producción :

1060
1001852
2003016
3004172

Usamos la función delay() para agregar un retraso en el código para ver la salida en el código. Se necesitaron 1060 microsegundos para ejecutar las líneas de código antes de la función micros().

El tiempo que lleva ejecutar una instrucción depende del tipo de placa Arduino porque diferentes placas tienen diferentes frecuencias. Para registrar el tiempo en milisegundos, podemos usar la función millis().

La función millis() y micros() no detiene ningún otro proceso que se esté ejecutando en Arduino. Podemos usarlos con una declaración condicional para realizar la misma tarea que la función delay() y delayMicroseconds().

Podemos usar la función millis() para verificar el tiempo, y usando una declaración if, podemos ejecutar una tarea por una cantidad de tiempo específica.

Por ejemplo, imprimamos un texto en el monitor serie y agreguemos un segundo de retraso para imprimir el texto con un intervalo de un segundo.

Ejemplo:

long t1 = 0;
long t2 = 0;
long t;
void setup() { Serial.begin(9600); }
void loop() {
  t1 = millis();
  t = t1 - t2;
  if (t > 1000) {
    Serial.println("Hello World");
    t2 = t1;
  }
}

Producción :

Hello World
Hello World
Hello World

Usamos la diferencia entre intervalos de tiempo en el código anterior para obtener el tiempo transcurrido. Si el tiempo es superior a un segundo o 1000 milisegundos, imprimiremos el texto y cambiaremos el segundo intervalo de tiempo al primer intervalo de tiempo para que la diferencia sea cero.

El resultado muestra que el texto se imprime con una diferencia de tiempo de un segundo en la ventana del monitor serie.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook