Por qué no deberías utilizar siempre la función de retardo de Arduino

¿Eres un entusiasta de la programación con Arduino? Entonces seguro que estás familiarizado con la función de retardo. Sin embargo, ¿sabías que su uso constante puede tener efectos negativos en tu proyecto? En este artículo, discutiremos por qué no deberías utilizar siempre la función de retardo de Arduino y qué alternativas tienes a tu disposición. ¡Sigue leyendo para descubrir más!

La primera vez que usaste un placa arduinoprobablemente hiciste algo como esto:

  • Conecté un LED a tu Arduino
  • Subí el boceto intermitente estándar que enciende y apaga el LED cada segundo.

Esto se llama programa Hello World de Arduino y muestra que puedes crear algo aplicable en el mundo real con solo unas pocas líneas de código.

Por qué no deberías utilizar siempre la función de retardo de Arduino

En el ejemplo anterior se utiliza el Demora() Función para definir los intervalos entre el encendido y apagado del LED.

Este es el trato: mientras Demora() es conveniente y funciona para ejemplos simples. Realmente no deberías usarlo en el mundo real… Sigue leyendo para saber por qué.

Cómo Demora() La función funciona

La forma en que Arduino Demora() Cómo funciona es bastante simple.

Acepta un único número entero como argumento. Este número representa el tiempo en milisegundos que el programa debe esperar antes de pasar a la siguiente línea de código.

si haces eso Retraso(1000) Tu Arduino se detendrá en esta línea durante 1 segundo.

Demora() es una función de bloqueo. Las funciones de bloqueo impiden que un programa haga cualquier otra cosa hasta que se complete la tarea en cuestión. Cuando es necesario realizar varias tareas al mismo tiempo, no puedes simplemente hacerlo Demora().

Si su aplicación requiere que lea/almacene constantemente datos de las entradas, considere usar el Demora() Función. Por suerte, hay una solución.

milisegundos() Función al rescate

El milisegundos() Cuando se llama, la función devuelve el número de milisegundos que han pasado desde que se inició el programa por primera vez.

¿Por qué es esto útil?

Porque con un poco de matemáticas puedes comprobar fácilmente cuánto tiempo ha pasado sin bloquear tu código.

El siguiente esquema muestra cómo puede utilizar este milisegundos() Función para crear un proyecto de parpadeo. Enciende la luz LED durante 1000 milisegundos y luego la vuelve a apagar. Pero lo hace de una manera que sin bloqueo.

Echemos un vistazo más de cerca a un boceto de Blink que funciona sin demora:

/* 
    Blink without Delay, example here: arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number :
const int ledPin =  13;      // the number of the LED pin

// Variables will change :
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change :
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the
  // difference between the current time and last time you blinked
  // the LED is bigger than the interval at which you want to
  // blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Ver código sin formato

Puedes encontrar este boceto arriba. Aquí y funciona restando el tiempo previamente grabado (anteriorMillis) desde la hora actual (actualMillis). Si el resto es mayor que el intervalo (en este caso 1000 milisegundos), el programa actualiza el anteriorMillis Variable a la hora actual y enciende o apaga el LED.

Y porque es un no bloqueocualquier código que esté fuera de este primero si declaración debería funcionar normalmente.

Ahora puedes entender que puedes agregar otras tareas a las tuyas. Cinta() función y su código aún haría parpadear el LED cada segundo.

¿Qué función deberías utilizar?

Aprendimos dos formas diferentes de lidiar con el tiempo usando Arduino. Uso de milisegundos() Las funciones requieren un poco más de trabajo en comparación con su uso Demora(). Pero sus programas no pueden realizar múltiples tareas en Arduino sin ellos.

Compartir esta publicacion ¡Con un amigo al que también le gusta la electrónica!

Puedes contactar conmigo dejando un comentario. Si te gusta esta publicación, es posible que también te gusten mis próximas. Así que apóyame suscribiéndote a mi blog y a mi página de Facebook.

Gracias por leer,

-Rui Santos

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded


Por qué no deberías utilizar siempre la función de retardo de Arduino

La primera vez que usaste una placa Arduino, probablemente hiciste algo como esto:

  1. Conectar un LED a tu Arduino
  2. Subir el sketch de blink por defecto que encendería y apagaría tu LED cada segundo

Este es el «Hola Mundo» de Arduino y muestra que con solo unas pocas líneas de código puedes crear algo que tiene una aplicación real en el mundo.

En el ejemplo anterior, utilizas la función delay() para definir los intervalos entre el encendido y apagado del LED.

¿Cómo funciona la función delay()?

La forma en que funciona la función delay() de Arduino es bastante sencilla. Acepta un solo entero como argumento. Este número representa el tiempo en milisegundos que el programa debe esperar antes de pasar a la siguiente línea de código. Cuando haces delay(1000), tu Arduino se detiene en esa línea durante 1 segundo.

La función delay() es una función de bloqueo. Las funciones de bloqueo impiden que un programa haga cualquier otra cosa hasta que esa tarea en particular se haya completado. Si necesitas que múltiples tareas ocurran al mismo tiempo, simplemente no puedes usar delay(). Si tu aplicación requiere que constantemente leas o guardes datos de entradas, debes evitar usar la función delay(). Afortunadamente, hay una solución.

¡La función millis() al rescate!

La función millis() cuando se llama, devuelve el número de milisegundos que han pasado desde que el programa se inició por primera vez.

¿Por qué es útil?

Debido a que mediante un poco de matemáticas, puedes verificar fácilmente cuánto tiempo ha pasado sin bloquear tu código. Utilizando la función millis() puedes crear un proyecto de blink de manera que sea no bloqueante.

El siguiente sketch muestra cómo puedes usar la función millis() para crear un proyecto de blink. Enciende la luz LED durante 1000 milisegundos y luego la apaga. Pero lo hace de manera no bloqueante.

¿Cuál función deberías usar?

Hemos aprendido dos formas diferentes de lidiar con el tiempo en Arduino. Usar la función millis() toma un poco de trabajo extra en comparación con usar delay(). Pero tus programas no pueden realizar múltiples tareas en Arduino sin ella.

Comparte esta publicación con un amigo que también le gusten la electrónica!

Puedes contactarme dejando un comentario. Si te gustó esta publicación, probablemente te gusten las siguientes, así que por favor apóyame suscribiéndote a mi blog y a mi página en Facebook.

Gracias por leer,

– Rui Santos


3 comentarios en «Por qué no deberías utilizar siempre la función de retardo de Arduino»

  1. En mi experiencia, el uso excesivo de la función de retardo en Arduino puede causar problemas de sincronización en proyectos más complejos. ¡Mejor aprender a programar de manera más eficiente!

  2. Totalmente de acuerdo, el retardo puede ser útil al principio, pero es importante explorar otras formas de programación para evitar limitaciones y problemas en proyectos más avanzados. Siempre es bueno seguir aprendiendo y mejorando nuestras habilidades. ¡Gracias por el consejo!

  3. Exacto, usar el retardo puede ser útil en proyectos sencillos, pero es importante conocer otras técnicas para evitar complicaciones en el futuro. ¡A practicar más y a mejorar nuestras habilidades de programación!

Deja un comentario