Ejemplo de uso de orden millis

Lo relacionado con la electronica y arduino.
Responder
dmarofer
Mensajes: 57
Registrado: 02 Feb 2015 15:40

Ejemplo de uso de orden millis

Mensaje por dmarofer » 23 Oct 2015 11:53

Voy a poner aqui un ejemplo de uso de la orden millis en Arduino ya que hay gente que me ha preguntado acerca de como hacer conteo de tiempo en el codigo sin usar la orden Delay (porque con la orden Delay el procesador se mantiene ocupado haciendo la cuenta).

Arduino tiene un contador interno en milisegundos independiente del procesador, que se inicia automaticamente al encenderlo, y que podemos consultar en cualquier momento mediante la orden millis. La variable que devuelve (un numero), es de tipo unsigned long (variable de 32 bits sin signo, que por lo tanto nos permite almacenar 2 elevado a la 32 numeros (o sea, hasta 4,294,967,295 milisegundos lo que es lo mismo 49,71 dias). Transcurrido este tiempo, desborda y vuelve a cero.

El truco aqui es muy sencillo: Cuando quiero contar X segundos (o mejor dicho, X milisegundos), almaceno el valor actual de la variable, sea cual sea, y la voy leyendo dentro del bucle loop de mi codigo en cada pasada. Restando el valor actual al incial que almacené puedo saber facilmente en cada momento la cantidad de tiempo que ha transcurrido, pero me permitira seguir haciendo otras cosas de mi programa sin quedarse parado.

Hay un tutorial sencillo en la web de Arduino para hacer parpadear un LED mediante esta tecnica, pero voy a poner aqui el codigo con mis comentarios a ver si queda algo mas claro:
Millis1.png
(141.12 KiB) Descargado 298 veces
Esto es particularmente util, porque podriamos seguir poniendo muucho codigo en nuestro ciclo loop debajo de esto para hacer lo que gustemos porque el procesador no se para en ningun momento, simplemente leera el valor, hara la resta y actuara en consecuencia del resultado cada ciclo, y tendremos una forma eficaz de hacer cuentas. El Delay es una instruccion que debemos usar solo cuando no nos quede mas remedio ya que parar el procesador pararse a hacer una cuenta es una forma chunga de malgastar sus capacidades (se enfada si lo malgastas para contar tiempo .....Piensa, oyes, que para eso estan los relojes. A mi no me pongas a hacer ese trabajo de mierda ..... )

Por si alguien quiere algo un poco mas complejo con millis, dejo aqui tambien el codigo de una alarma que hice, que utiliza esta tecnica para contar muchos tiempos durante el programa (para los tiempos de entrada y salida, de encendido de luces mediante sensores de movimiento, para el parpadeo de leds, .....)
Alarmatico1.7z
(4.03 KiB) Descargado 413 veces

Disenator
Mensajes: 66
Registrado: 31 Ene 2015 11:51

Re: Ejemplo de uso de orden millis

Mensaje por Disenator » 23 Oct 2015 19:30

Ala mas deveres para estudiar, esto no se acaba nunca :D

JotaCe
Mensajes: 83
Registrado: 30 Ene 2015 13:12

Re: Ejemplo de uso de orden millis

Mensaje por JotaCe » 26 Oct 2015 10:55

Opino lo mismo que Iván :D :D
Con la particularidad que a mí esto que publicas intuyo que no solo me viene bien saberlo (ya había leído algo sobre el particular pero nunca tan bien explicado), sino que me va a hacer falta para mi disparador fotográfico (cuando decida retomarlo un año de estos).

Muchas gracias Diego.

Responder