Pplware

Vamos programar com o Arduino – #04: Tempos de Espera

Dando seguimento à serie de tutoriais “Vamos programar com o Arduino”, hoje iremos aprender  algumas funções que nos permitem definir tempos de espera na nossa aplicação.

Como observamos no projeto anterior “Projeto Sensor de Temperatura” foi utilizada uma função chamada delay para que fosse possível efetuar leituras das temperaturas num determinado espaço de tempo.

Além da função delay existem outras funções e métodos que nos permitem efetuar tempos de espera ao longo dos nossos projetos, como a função millis, micros e interrupts. Ao longo deste tutorial iremos abordar somente as funções millis e micros, iremos falar dos interrupts mais tarde ao longo desta serie de tutorias.

Função delay() / delayMicroseconds()

As funções delay() ou delayMicroseconds() têm como objetivo parar o programa por um determinado período de tempo. Ambas funções são muito simples de programar bastando colocar como paramento o tempo em milissegundos caso usarmos a função delay() ou em microssegundos caso for a função delayMicroseconds().

Aidciona-se o seguinte código:

void loop() {

digitalWrite(led,HIGH); delay(2000); digitalWrite(led,LOW);

}

Com este pedaço de código é possível colocar um led a piscar num intervalo de 2000 milissegundos. Como podemos verificar são funções bastantes simples de se trabalhar, porem por vezes não são as mais indicadas. Como foi falado mais acima neste tutorial, estas funções têm como objetivo parar o nosso programa por um determinado período de tempo, em certas circunstâncias a função delay() não é a melhor opção.

Por exemplo quando queremos que o nosso Arduino esteja a fazer várias leituras de diferentes sensores, a função delay() como para o programa por completo poderá atrapalhar as outras leituras. Por essas razões esta função só convém ser usada em pequenos projetos.

Função millis() / micros()

A função millis() ou micros() funciona de uma maneira diferente da função delay(). Ambas as contam o tempo em milissegundos(millis) ou em microssegundos(micros) desde que o nosso programa começou.

Ao contrário da função delay() estas funções não para o nosso programa, o que se torna pertinente. Por outro lado, estas funções não são tão simples como a delay(). Como podemos supor, estas funções simplesmente iniciam um pequeno contador quando o nosso programa arranca, se colocarmos o millis() da mesma maneira que colocamos o delay() simplesmente não acontecerá nada.

Para demonstrar e explicar como podemos usar a função millis() / micros() iremos recordar o projeto do Sensor de Temperatura. Se olharmos para esse mesmo projeto verificamos que foi utilizado a função delay() para que nos fosse possível mostrar a temperatura num período de tempo. Desta vez iremos pegar no mesmo projeto mas alterar de maneira a usarmos a função millis() invés da função delay().

#include int Sensor = 2; char Modelo = DHT11; DHT dht(Sensor ,Modelo); unsigned long tempoAnterior = 0; // cria uma Variável que guarde o tempo anterior essa variável não terá números negativos const long intervalo = 60000; // indica o intervalo de tempo em milissegundos pretendido para o sensor fazer a leitura e mostrar no ecrã float temperatura; float humidade;

void setup() {

Serial.begin(9600); pinMode(Sensor, INPUT); dht.begin(); }

void loop() {

if (millis() – tempoAnterior >= intervalo) { // Esta condição vai verificar sempre que o tempo percorrido pelo programa for igual ou superior ao intervalo definido é executada a leitura da temperatura tempoAnterior = millis(); // Atualiza a variável para a nova contagem de tempo, para que e condição acima seja sempre sincronizada temperatura = dht.readTemperature(); humidade = dht.readHumidity(); Serial.print(“Temperatura: “); Serial.print(temperatura); Serial.print(“c Humidade: “); Serial.print(humidade); Serial.println(“%”);

Como verificamos no programa acima, para usarmos a função millis() ou micros() invés da função delay() é preciso criar uma condição que verifica se o tempo percorrido do programa é maior ou igual ao intervalo de tempo definido.

Para que o tempo seja sempre sincronizado e atualizado é necessário guardar o tempo percorrido numa variável, neste caso a variável tem como nome tempoAnterior.

Estas funções apresentadas são aquelas que podemos usar no Arduíno. Como podemos verificar neste tutorial a melhor maneira de efecturar um tempo de espera será com a função millis() / micros(). Além destas funções podemos, podemos substituir estas funções por Interrupts,o que na maioria dos casos é a opção mais pertinente, mas é conteúdo para ser abordado num outro tutorial.

Exit mobile version