Funções de temporização na programação com Arduino

Objetivo

Nesta dica vamos mostrar utilizar as diversas funções de temporização disponíveis na programação com Arduino. As funções de Temporização servem para pausar o programa por um determinado tempo ou para contar um período de tempo entre duas referências específicas.

Funções de temporização:

  • delay()
  • delayMicroseconds()
  • millis()
  • micros()

1. Função delay()

1.1. A função delay() pausa a execução do programa por um intervalo de tempo especificado em milissegundos (ms). Cada segundo equivale a 1000 milissegundos.

1.1.1. É importante frisar que quando utilizamos a função delay() o programa fica parado completamente pelo período de tempo especificado.

1.1.2. Portanto, o emprego da função delay() deve ser utilizada apenas em aplicações muito simples ou quando usado com períodos de tempo bem pequenos, como para resolver problemas de "deboucing", por exemplo.

1.1.3. As interrupções externas não são desativadas durante a pausa pela função delay().

1.1.4. O tipo de dado aceito para o parâmetro tempo é unsigned int. Veja Tipos de dados usados pelo Arduino.

1.1.4. Recomenda-se como alternativa a utilização da função milis().

1.2. Sintaxe:

delay(tempo);

 1.3. Exemplo: 

1.3.1. Fazer um Led conectado no pino 13 do Arduino piscar, sendo 2 segundos aceso e 1 segundo apagado.

const byte ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(2000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

 2. Função delayMicroseconds()

 2.1. A função delayMicroseconds() pausa a execução do programa por um intervalo de tempo especificado em microsegundos (μs). Cada milissegundo equivale a 1000 microssegundos e cada segundo equivale a um milhão de microssegundos.

2.1.1. O tipo de dado aceito para o parâmetro tempo é unsigned int. Veja Tipos de dados usados pelo Arduino.

2.1.2. O maior valor (atualmente) para produzir um delay é 16383.

2.1.3. Essa função funciona de forma bastante precisa em temporização a partir de 3μs.

2.2. Sintaxe:

delayMicroseconds(tempo);

 2.3. Exemplo:

2.3.1. Exibir no monitor serial o resultado de uma progressão aritmética de razão 2 a cada 10 microssegundos:

int resultado = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  delayMicroseconds(10);
  resultado += 2;
  Serial.println(resultado);
}

3. Função millis()

3.1. A função millis() retorna o número em milissegundos decorridos desde que a placa Arduino começou a executar o programa atual, ou seja, desde que foi ligada. Esse número é zerado após aproximadamente 50 dias.

3.1.1. A vantagem de usar essa função é que o programa não é pausado. Desta forma, as demais funções do programa podem ser executadas simultaneamente enquanto a função millis() executa a contagem do tempo.

3.1.2. O tipo de dado aceito para o parâmetro tempo é unsigned long. Veja Tipos de dados usados pelo Arduino.

3.2. Sintaxe:

tempo = millis();

 3.2.1. A variável tempo recebe o número de milissegundos (ms) decorridos desde que o Arduino foi ligado. O tipo de dado retornado é unsigned long.

3.3. Exemplo1:

3.3.1. Fazer um Led conectado no pino 13 do Arduino acender após 3 segundos.

const byte ledPin = 13;
unsigned long tempo;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  tempo = millis();
  if (tempo > 3000) { 
    digitalWrite(ledPin, HIGH);
  }
}

3.4. Exemplo2:

3.4.1. Fazer um Led conectado no pino 13 do Arduino piscar, sendo 2 segundos aceso e 1 segundo apagado.

const byte ledPin = 13;
unsigned long anterior = 0;
boolean liga = 0; // led desligado

void setup() {
    pinMode(ledPin, OUTPUT);
}

void loop() {
    unsigned long atual = millis();
    if (atual - anterior > 1000 && liga == 0) {
        digitalWrite(ledPin, HIGH);
        liga = 1;
        anterior = atual;
    }

    if (atual - anterior > 2000 && liga == 1) {
        digitalWrite(ledPin, LOW);
        liga = 0;
        anterior = atual;
    }        
}

 4. Função micros()

 4.1. A função  micros() retorna o número em microssegundos decorridos desde que a placa Arduino começou a executar o programa atual, ou seja, desde que foi ligada. Esse número é zerado após aproximadamente 70 minutos.

4.1.1. A função micros() também não pausa o programa enquanto e executado.

4.1.2. Em placas de Arduino de 16 MHz (como o Arduino Nano), a função possui resolução de 4μs, ou seja, o valor retornado é um múltiplo de 4. Já em placas Arduino de 8 MHz (como o LilyPad), a resolução da função micros() é de 8μs.

4.1.3. O tipo de dado aceito para o parâmetro tempo é unsigned long. Veja Tipos de dados usados pelo Arduino.

4.2. Sintaxe:

tempo = micros();

4.2.1. A variável tempo recebe o número de  microssegundos (μs) decorridos desde que o Arduino foi ligado. O tipo de dado retornado é unsigned long

4.3. Exemplo:

4.3.1. Fazer acender um LED conectado no pino 13 do Arduino acender após 3 segundos (equivale a 3 milhões de microssegundos):

const byte ledPin = 13;
unsigned long tempo;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  tempo = micros();
  if (tempo > 3000000) { 
    digitalWrite(ledPin, HIGH);
  }
}

5. Documentação oficial

Função delay() - Referência Arduino

Função delayMicroseconds() - Referência Arduino

Função millis() - Referência Arduino

Função micros() - Referência Arduino

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Compartilhe:

Publicidade

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Advertisement

Squids Arduino News

Desafio 94 - Projeto 103 Medir iluminância em 3 modos de precisão - BH1750 e Arduino Com base no Projeto103 - Como usar o sensor BH1750 com Arduino sem auxílio de biblioteca específica, resolva...

Básico - Projeto 103 Usando o sensor BH1750FVI sem biblioteca - luminosidade Objetivo O objetivo deste projeto é mostrar como utilizar o sensor de luz BH1750FVI junto com o Arduino para determi...

Intermediário - Projeto 17 Medir distâncias com sensor HC-SR04, RGB, display OLED e Arduino Objetivo Utilizar o sensor ultrassônico HC-SR04 junto com o Arduino para medir distâncias entre o sen...

Desafio 93 - Projeto I16 Medir distâncias com sensor ultrassônico / indicador luminoso Com base no projeto I16 - Como medir distâncias por meio de um sensor ultrassônico HC-SR04 com Arduino e d...

Intermediário - Projeto 16 Medir distâncias com sensor HC-SR04, display LCD e Arduino Objetivo Utilizar o sensor ultrassônico HC-SR04 junto com o Arduino para medir distâncias entre o sensor e ...

Outros artigos

Mais: Desafios Projetos Básicos Projetos Intermediários Circuitos básicos

Você está preparado?

Topo