Adquira estes componentes na Loja do Lab de Garagem

No Arduino existem várias formas de se utilizar o tempo, como as funções delay's, millis(), micros(), bibliotecas e periféricos as quais podem ser encontradas na internet, seja no site do Arduino, ou em outros sites sobre arduino. Neste tutorial, vamos falar um pouco sobre Timer e estas funções.

As funções delay(ms) e delayMicroseconds(us) são funções de atraso ou espera, ao chamar estas funções elas irão  contar o tempo que foi determinado em milissegundos(ms) ou microssegundos(us). Por exemplo: delay(500), o arduino irá contar até 500 milissegundos e depois irá para próxima instrução. O delayMicroseconds(500), o arduino fará o mesmo que o delay, mas em microssegundos. O problema de utilizar estas funções é que elas "pausam" a programação até terminar o tempo que foi determinado.

Com a função millis() o arduino retorna o tempo a partir do momento em que o Arduino roda a programação. Esta função é melhor que a delay, porque o millis() não "pausa" a programação para fazer a contagem. Vamos pegar o exemplo BlinkWithouDelay:

/* Blink without Delay

Turns on and off a light emitting diode(LED) connected to a digital
pin, without using the delay() function. This means that other code
can run at the same time without being interrupted by the LED code.

The circuit:
* LED attached from pin 13 to ground.
* Note: on most Arduinos, there is already an LED on the board
that's attached to pin 13, so no hardware is needed for this example.


created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen

This example code is in the public domain.


http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

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

// Variables will change:
int ledState = LOW; // ledState used to set the LED
long previousMillis = 0; // will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
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);
}
}

Na linha: "unsigned long currentMillis = millis();", estamos armazenando o número em milissegundos que a função millis() retornou, na variável currentMillis. 

Na linha "if(currentMillis - previousMillis > interval)", estamos declarando que se a subtração do tempo atual(currentMillis) com o tempo anterior(previousMillis) for maior que o intervalo de tempo(interval) determinado, então faça as instruções... As instruções declaradas dentro deste "if" fazem o LED do pino 13 acender e apagar dentro do intervalo determinado.

A função micros() tem a mesma funcionalidade que a millis(), mas só que micros() faz a contagem de tempo em microssegundos.

Apesar dessas funções serem muito funcionais, elas não são muito precisas ou zeram depois de um certo tempo por causa do atmega e do cristal de 16Mhz. Agora para uma maior precisão de tempo e obter dados em tempo real(Real Time Clock) por exemplo, existe várias bibliotecas disponíveis como Time que pode ser usado com ou sem hardware externo e esta biblioteca que utiliza o DS1307 para tempo real(Real Time Clock). As duas bibliotecas são utilizadas para contar e mostrar o tempo real como horas, dia, mês e ano. 

E é isso aí!! Esperamos que tenham gostado!! Se tiverem dúvidas, postem aqui neste blog! Caso tenham sugestões de tutoriais, postem aqui neste POST!! Vocês podem ver os outros tutoriais clicando AQUI e os projetos clicando AQUI!! Até a próxima!!

Referências:

http://arduino.cc/playground/Main/InterfacingWithHardware#time

http://www.arduino.cc/playground/Code/Time

https://github.com/davidhbrown/RealTimeClockDS1307

Exibições: 48682

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Marcelo Colige Borges em 2 novembro 2015 às 22:30

Gostaria que meu tempo começasse a contar apenas quando der um "start" em um interruptor, funciona basicamente o seguinte: de acordo com a leitura de uma série de sensores, se todos forem verdadeiros, depois de 1 minuto, deve-se acender um led.

usando essa função millis, caso algum desse sensor der falso, ele irá "parar" a contagem? ou seja, o led não irá acender?

Comentário de Danilo Solina Ciarelli em 13 janeiro 2015 às 20:12

como faço pra zerar a funçao millis?

Comentário de Patricia M. do N. Fonseca em 17 julho 2014 às 3:19

Estou usando o Arduino Uno apenas e gostaria que o meu programa exibisse na tela a hora atual, como fazer sem hardware externo? Tentei com a biblioteca Time e não funcionou conforme eu esperava.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço