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:

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Squids Arduino News

Desafio 86 - Projeto hub009 Piscar led de acordo com o potenciômetro usando millis() Com base no Hub 009 - Piscar led de acordo com o potenciômetro em intervalos de 0.5 a 3 segundos - Arduino r...

Básico - Hub 009 Piscar led no intervalo de 0.5 a 3 segundos conforme potenciômetro   Sugerido por: Jhulio Cesar Objetivo Faça com que um LED pisque em função da posição do potenciômetro, ...

Desafio 85 - Projeto 95 Acionando um motor DC por um sensor de som Com base no Projeto 95 - Usando o sensor de som para acender e apagar um led - Arduino resolva os seguintes desafios: 1. A...

Operador Ternário na programação com Arduino Objetivo Nesta dica vamos mostrar como usar o operador ternário na programação com Arduino. O operador ternário é uma alternativa elegante e compacta...

Básico - Projeto 95 Acender e apagar um led com som Objetivo O objetivo deste projeto é criar um circuito para acender e apagar um led batendo palmas. Para isso, vamos utilizar um módulo sensor...

Outros artigos

Mais: Desafios Básico Dicas de Software Projetos Básicos Circuitos básicos Projetos Intermediários

Você está preparado?

Topo