sábado, 28 de abril de 2018

La función delayMicroseconds en Arduino

He leído varios artículos como éste donde se recomiendan no usar tanto delay. Los autores de esos artículos exponen diversos motivos para no usar delay tales como el incremento del consumo de recursos por parte de Arduino  mientras cuentan el tiempo de delay deja de realizar otras tareas como leer las mediciones de los sensores, etc. Los delay son acumulativos en Loop. La función delay es incompatible con las interrupciones y el código mejora sustituyendo delay por delayMicroseconds (). Existen otras alternativas a delay como la función (millis) y el modo sleep. Así que he decidido empezar a estudiar otras alternativas a la función delay para mejorar los códigos que pueda hacer de Arduino en un futuro. ¿Qué es delayMicroseconds ()?

delayMicroseconds ()

Pausa el programa por un periodo de tiempo (en microsegundos) que es especificado como parámetro. Hay mil microsegundos en un milisegundo y un millón de microsegundos en un segundo.

Actualmente, el valor más grande que produce un retraso preciso es 16383. Esto podría cambiar en futuras versiones de Arduino. Para retrasos de más de unos pocos miles de microsegundos, debe usar delay() en lugar de delayMicroseconds ()

Sintaxis

delayMicroseconds(us)

Parámetros

us : la cantidad de microsegundos a pausar ( unsigned int )

Devoluciones

Ninguna

Código de ejemplo

El código configura el pin número 8 para que funcione como un pin de salida. Envía un tren de pulsos de aproximadamente 100 microsegundos. La aproximación se debe a la ejecución de las otras instrucciones en el código.

int outPin = 8;                 // digital pin 8
void setup()
{
  pinMode(outPin, OUTPUT);      // sets the digital pin as output
}
void loop()
{
  digitalWrite(outPin, HIGH);   // sets the pin on
  delayMicroseconds(50);        // pauses for 50 microseconds
  digitalWrite(outPin, LOW);    // sets the pin off
  delayMicroseconds(50);        // pauses for 50 microseconds
}

Notas y advertencias:

Esta función funciona con mucha precisión en el rango de 3 microsegundos y más. No podemos asegurar que delayMicroseconds funcionará con precisión para tiempos de retardo más pequeños.

A partir de Arduino 0018, delayMicroseconds () ya no deshabilita las interrupciones.

Fuente: https://www.arduino.cc/reference/en/language/functions/time/delaymicroseconds/