Función de retardo de arduino, y por qué no se debe utilizar

Cuando empezó aprender cómo desarrollar para el Arduino, probablemente construido un producto que funciona un poco como esto:Primeros pasos con Arduino: una guía para principiantesPrimeros pasos con Arduino: una guía para principiantesArduino es una plataforma electrónica de prototipos de código abierto basado en flexible y fácil de usar hardware y software. Está pensado para artistas, diseñadores, aficionados y cualquier persona interesada en la creación de objetos interactivos o ambientes.Lee mas

Conectado a su Arduino sería una sola luz LED. Esto convertiría vez cada segundo más o menos, y continuará hasta el Arduino se apaga. Este es el programa “Hello World” de Arduino, y perfectamente ilustra cómo sólo unas pocas líneas de código pueden crear algo tangible.

encabezada por Arduino

También estoy dispuesto a apostar que utilizó la retrasar() función para definir los intervalos entre la luz encendido y apagado. Pero aquí está la cosa: mientras retraso es útil para demostraciones básicos de cómo funciona Arduino, que realmente no debería estar utilizando en el mundo real. He aquí por qué - y lo que debe utilizar en su lugar.

Cómo Delay () Obras

La forma en que el retrasar() La opción funciona es bastante simple. Acepta una solo número entero (O número) argumento. Este número representa el tiempo (medido en milisegundos) que el programa debe esperar hasta que se mueve a la siguiente línea de código.Los fundamentos de Programación de Computadoras 101 - Variables y tipos de datosLos fundamentos de Programación de Computadoras 101 - Variables y tipos de datosDespués de haber introducido y habló un poco sobre programación orientada a objetos antes y donde su homónimo viene, pensé que es hora de ir a través de los fundamentos absolutos de la programación de una manera no específica del idioma. Esta...Lee mas

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

Vídeo: arduino desde cero (manejo de funciones) 4 tutorial

La diferencia entre el bloqueo y funciones no bloqueante

Para ilustrar por qué funciones de bloqueo son malos, quiero que se imaginen dos chefs diferentes en una cocina: Henry bloqueo, y Eduardo no bloqueante. Ambos hacen el mismo trabajo, pero en muy diferentes maneras.

Cuando Henry hace el desayuno, empieza por poner dos rebanadas de pan en el tostador. Cuando finalmente pings, y el pan se sale marrón dorado, Henry pone en un plato y grietas dos huevos en una sartén. Una vez más, se destaca por como aparece el aceite, y los blancos comienzan a endurecerse. Cuando hayan terminado, él placas para arriba y comienza a freír dos lonchas de bacon. Una vez que están lo suficientemente crujiente, que los lleva fuera de la sartén, los pone en el plato y empieza a comer.

Arduino-chef

Eduardo funciona de una manera ligeramente diferente. Mientras que el pan está tostando, que ya ha empezado a freír sus huevos y tocino. En lugar de esperar a que un elemento para terminar de cocinar antes de pasar al siguiente, que está cocinando varios elementos concurrentemente. El resultado final es Eduardo tarda menos tiempo para preparar el desayuno de Henry hace - y por el momento Henry bloqueo ha terminado, el pan y los huevos han ido frío.

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

El bloqueo funciones de impedir que un programa de hacer nada más hasta que la tarea en particular se ha completado. Si quieres múltiple comportamiento a ocurrir al mismo tiempo, simplemente no se puede utilizar retrasar().

En particular, si la aplicación se requiere para adquirir constantemente los datos de los sensores conectados al mismo, se debe tener cuidado para evitar el uso de la retrasar() función, ya que hace una pausa absolutamente todo.

Vídeo: ✅ Conexión por Internet del Arduino (Shield Ethernet) Como se hace

Por suerte, retrasar() no es la única manera de hacer su espera del programa cuando la codificación para Arduino.

Conoce Millis ()

los millis () función realiza una sola tarea. Cuando se llama, devuelve (como una largo tipo de datos) el número de milisegundos que han transcurrido desde que se puso en marcha por primera vez el programa. Así que, ¿por qué es tan útil?

Debido a que mediante el uso de un poco de matemática simple, usted puede fácilmente aspectos “tiempo” de su programa sin afectar a su funcionamiento. La siguiente es una demostración básica de cómo Millis () funciona. Como verá, la voluntad programa convierte la luz LED durante 1000 milisegundos (un segundo), y luego lo apaga. Pero lo más importante, lo hace de una manera que es no bloqueante.

Ahora vamos a ver cómo funciona con Arduino.

Arduino-millis-ejemplo

Este programa - que está fuertemente basada en uno de la documentación oficial de Arduino - funciona restando el tiempo registrado anterior a la hora actual. Si el resto (es decir. Tiempo transcurrido desde el momento de la última registrada) es mayor que el intervalo (en este caso, 1000 milisegundos), el programa actualiza el momento anterior variable a la hora actual, y, o bien gira el LED encendido o apagado.

Vídeo: 4.2 - ¿Cómo funciona la placa de arduino

Y porque es un no-bloqueo, cualquier código que se encuentra fuera de esa primera if debería funcionar normalmente.

Simple, ¿verdad? Tenga en cuenta la forma en que creamos la variable hora actual como una no firmado largo. Un no firmado valor simplemente significa que nunca puede ser negativo- hacemos esto por lo que el número máximo que puede almacenar es más grande. Por defecto, las variables numéricas son firmados, lo que significa un “bit” de la memoria se utiliza para esa variable para almacenar si el valor es positivo o negativo. Al especificar que sólo va a ser positivo, tenemos un bit extra para jugar.

interrupciones

Hasta ahora, hemos aprendido acerca de una forma de acercarse a la sincronización en nuestro programa de Arduino que es mejor que retrasar(). Pero hay otro, mucho mejor, pero más complejo: interrupciones. Estos tienen la ventaja de que permite en cuando, precisamente, su programa de Arduino y responder rápidamente a una entrada externa, pero en una asincrónico manera.

Eso significa que se ejecuta en conjunto con el programa principal, constantemente a la espera de que se produzca un evento, sin interrumpir el flujo de su código. Esto le ayuda a responder de manera eficiente a los acontecimientos, sin afectar el rendimiento del procesador Arduino.

Cuando se dispara una interrupción, que o bien se detiene el programa, o llama a una función, conocida comúnmente como una manejador de interrupción o un Rutina de Servicio de Interrupción. Una vez que esto se ha llegado a la conclusión, a continuación, el programa se remonta a lo que iba.

Vídeo: Curso de Arduino 9: Display LED de 7 Segmentos

El chip AVR alimentar el Arduino sólo es compatible con las interrupciones de hardware. Estos se producen cuando un pin de entrada va de mayor a menor, o cuando son activados por temporizadores incorporados de la Arduino.

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

No se bloquean

Utilizando millis () Es cierto que las tomas un poco de trabajo extra en comparación con el uso de retrasar(). Pero confía en mí, sus programas gracias por ello, y no se puede hacer multitarea en el Arduino sin ella.

Si desea ver un ejemplo de millis () utilizado en un proyecto en el mundo real Arduino, echa un vistazo Arduino luz de la noche y el amanecer de alarma de James Bruce.Proyecto de alarma Arduino luz de la noche y el amanecerProyecto de alarma Arduino luz de la noche y el amanecerHoy en día, vamos a hacer un reloj de alarma de la salida del sol, que le despertará suavemente y poco a poco sin tener que recurrir a una máquina de ruido de decisiones ofensivo.Lee mas

Se ha encontrado ningún otras funciones de bloqueo debemos tener cuidado de? Déjame saber en los comentarios de abajo, y vamos a charlar.

Créditos de las fotografías: Arduino (Daniel Spiess), Chef (Ollie Svenson)

Artículos Relacionados