Función de retraso de Arduino y por qué no debe usarla

  • William Charles
  • 0
  • 4519
  • 768
Anuncio

Cuando comenzó a aprender cómo desarrollar Introducción a Arduino: una guía para principiantes Introducción a Arduino: una guía para principiantes Arduino es una plataforma de creación de prototipos de electrónica de código abierto basada en hardware y software flexible y fácil de usar. Está destinado a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. para Arduino ¿Qué es Arduino y qué puede hacer con él? ¿Qué es Arduino y qué puedes hacer con él? El Arduino es un pequeño dispositivo electrónico notable, pero si nunca ha usado uno, ¿qué son exactamente y qué puede hacer con uno? , probablemente construiste un producto que funciona un poco así:

Conectado a su Arduino habría una sola luz LED. Esto se apagaría y apagaría cada segundo más o menos, y continuará hasta que se apague el Arduino. Este es el “Hola Mundo” programa de Arduino, e ilustra perfectamente cómo unas pocas líneas de código pueden crear algo tangible.

También estoy dispuesto a apostar que usaste el retrasar() función para definir los intervalos entre el encendido y apagado de la luz. Pero aquí está la cosa: si bien el retraso es útil para demostraciones básicas de cómo funciona Arduino, realmente no debería estar usándolo en el mundo real. He aquí por qué, y qué debería usar en su lugar.

Cómo funciona Delay ()

La forma en que retrasar() La función funciona es bastante simple. Acepta un solo número entero. Conceptos básicos de la programación informática 101 - Variables y tipos de datos Conceptos básicos de la programación informática 101 - Variables y tipos de datos Habiendo introducido y hablado un poco sobre la programación orientada a objetos antes y de dónde proviene su nombre, pensé que es hora de que pasemos Los fundamentos absolutos de la programación de una manera no específica del lenguaje. Este ... (o número) argumento. Este número representa el tiempo (medido en milisegundos) que el programa debe esperar hasta pasar a la siguiente línea de código.

Pero el problema es que el retrasar() La función no es una buena manera de hacer que su programa espere, porque es lo que se conoce como “bloqueo” función.

La diferencia entre las funciones de bloqueo y no bloqueo

Para ilustrar por qué las funciones de bloqueo son malas, quiero que imagines dos chefs diferentes en una cocina: Henry Blocking, y Eduardo sin bloqueo. Ambos hacen el mismo trabajo, pero de maneras muy diferentes..

Cuando Henry prepara el desayuno, comienza poniendo dos rondas de pan en la tostadora. Cuando finalmente pings, y el pan se vuelve dorado, Henry lo pone en un plato y rompe dos huevos en una sartén. Una vez más, se queda quieto mientras el petróleo explota, y los blancos comienzan a endurecerse. Cuando terminan, los sirve en platos y comienza a freír dos lonchas de tocino. Una vez que estén lo suficientemente crujientes, los saca de la sartén, los pone en el plato y comienza a comer..

Eduardo trabaja de una manera ligeramente diferente. Mientras su pan está tostado, ya comenzó a freír sus huevos y tocino. En lugar de esperar a que un artículo termine de cocinarse antes de pasar al siguiente, está cocinando varios artículos concurrentemente. El resultado final es que Eduardo toma menos tiempo para preparar el desayuno que Henry, y cuando Henry Blocking ha terminado, las tostadas y los huevos se han enfriado..

Es una analogía tonta, pero ilustra el punto.

Bloqueo las funciones evitan que un programa haga otra cosa hasta que esa tarea en particular se haya completado. Si quieres multiples comportamiento suceder al mismo tiempo, simplemente no puedes usar retrasar().

En particular, si su aplicación requiere que adquiera constantemente datos de sensores conectados, debe tener cuidado de evitar usar retrasar() función, ya que se detiene absolutamente todo.

por suerte, retrasar() no es la única forma de hacer que su programa espere al codificar Arduino.

Conoce a Millis ()

los millis () La función realiza una sola tarea. Cuando se llama, vuelve (como un largo tipo de datos) la cantidad de milisegundos que han transcurrido desde que se lanzó el programa por primera vez. Entonces, ¿por qué es tan útil??

Porque al usar un poco de matemática simple, puedes fácilmente “hora” aspectos de su programa sin afectar cómo funciona. La siguiente es una demostración básica de cómo funciona millis (). Como verá, el programa encenderá la luz LED durante 1000 milisegundos (un segundo) y luego la apagará. Pero crucialmente, lo hace de una manera que no bloquea.

Ahora veamos cómo funciona con Arduino.

Este programa, que se basa en gran medida en uno de la documentación oficial de Arduino, funciona restando el tiempo registrado anterior del tiempo actual. Si el resto (es decir, el tiempo transcurrido desde la última vez que se registró el tiempo) es mayor que el intervalo (en este caso, 1000 milisegundos), el programa actualiza el vez anterior variable a la hora actual, y enciende o apaga el LED.

Y debido a que no bloquea, cualquier código que se encuentre fuera de ese primero si la declaración debería funcionar normalmente.

Simple, ¿no es así? Note como creamos la variable tiempo actual como un no firmado largo. Un no firmado valor simplemente significa que nunca puede ser negativo; hacemos esto para que el número máximo que podamos almacenar sea mayor. Por defecto, las variables numéricas están firmadas, lo que significa uno “poco” de memoria para esa variable se utiliza para almacenar si el valor es positivo o negativo. Al especificar que solo será positivo, tenemos un poco más para jugar.

Interrupciones

Hasta ahora, hemos aprendido sobre una forma de abordar el tiempo en nuestro programa Arduino, que es mejor que retrasar(). Pero hay otra forma mucho mejor, pero más compleja: interrumpe. Estos tienen la ventaja de permitirle cronometrar con precisión su programa Arduino y responder rápidamente a una entrada externa, pero en un asincrónico manera.

Eso significa que se ejecuta junto con el programa principal, esperando constantemente que ocurra un evento, sin interrumpir el flujo de su código. Esto le ayuda a responder eficientemente a los eventos, sin afectar el rendimiento del procesador Arduino..

Cuando se activa una interrupción, detiene el programa o llama a una función, comúnmente conocida como Manejador de interrupciones o un Rutina de servicio de interrupción. Una vez que esto ha concluido, el programa vuelve a lo que estaba pasando..

El chip AVR que alimenta el Arduino solo admite interrupciones de hardware. Esto ocurre cuando un pin de entrada va de mayor a menor, o cuando se activa por los temporizadores integrados del Arduino.

Suena críptico. Confuso, incluso. Pero no lo es. Para ver cómo funcionan y ver algunos ejemplos de ellos utilizados en el mundo real, consulte la documentación de Arduino.

No te bloquees

Utilizando millis () Es cierto que requiere un poco de trabajo extra en comparación con el uso retrasar(). Pero confía en mí, tus programas te lo agradecerán y no puedes realizar múltiples tareas en Arduino sin él..

Si quieres ver un ejemplo de millis () utilizado en un proyecto Arduino del mundo real, echa un vistazo a Arduino Night Light and Sunrise Alarm de James Bruce. Proyecto de alarma de luz nocturna y amanecer de Arduino Proyecto de alarma de luz nocturna y amanecer de Arduino Hoy, haremos un despertador de amanecer, que lo despertará suave y lentamente sin recurrir a una máquina ofensiva que hace ruido.

¿Encontraste alguna otra función de bloqueo de la que debamos tener cuidado? Déjame saber en los comentarios a continuación, y hablaremos.

Créditos de las fotos: Arduino (Daniel Spiess), Chef (Ollie Svenson)




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.