Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Controlando Intervalos de Tempo com Arduino

Veja neste rápido tutorial como controlar intervalos de tempo de forma simples com Arduino, executando tarefas de forma “paralela” sem interromper o processamento .


É muito comum em projetos com Arduino a necessidade de realizarmos certas tarefas em intervalos específicos ao mesmo tempo que executamos  outras operações.
Por exemplo: Ler um sensor ou escrever um texto no LCD enquanto fazemos piscar um LED.

No entanto, sabemos que a plataforma Arduino não é boa nesse quesito pois não suporta programação paralela ou threads. Dessa forma lançamos mão de artifícios usando o comando millis ou então apelamos para o uso de  interrupções.

A solução usando o millis funciona bem mas não é a ideal devido às conhecidas limitações desse comando, além de  deixar o seu código  pouco legível com muitas variáveis e controles.
Felizmente existem algumas bibliotecas que encapsulam em classes toda essa complexidade, oferecendo uma interface simples de ser utilizada. É o que vamos ver neste tutorial, deixando  o conceito de interrupções para uma próxima oportunidade.

O projeto

Para testar a biblioteca, vamos realizar a seguinte experiência:

  • Três LEDS coloridos (R – G – Y) ligados ao Arduino;
  • O led verde vai piscar a cada 2 segundos, o amarelo a cada 4 segundos e o vermelho a cada 10 segundos;
  • A mesmo tempo, ou seja, de forma “paralela”, vamos fazer uma contagem regressiva recursiva de 10 até 1 no monitor serial.

Material necessário

  • Placa Arduino, ESP*, Attiny* ou qualquer outra compatível com a plataforma Arduino;
  • 3 LEDS coloridos;
  • 3 resistores 220 Ohms.

Software Necessário

Timing Library

Essa biblioteca permite, de forma transparente e simplificada, estabelecer intervalos de tempos “concorrentes” para realização de tarefas  sem poluir muito seu código.  Ela utiliza o millis para seus cálculos e possui apenas dois métodos:

  • begin → Inicializa o timer.
  • onTimeout → Testa se o intervalo especificado foi atingido. Opcionalmente pode-se indicar uma função para ser executada.

Esquema de montagem

Arduino – Controlando Intervalos de Tempo

Vídeo demonstração

O Sketch

#include 

//Definição dos pinos dos LEDs
#define greenLed 5
#define yellowLed 6
#define redLed 7

// Um timer para cada LED e um para o contador
Timing timerGreen;
Timing timerYellow;
Timing timerRed;
Timing timerContador;
int contador = 11;

void setup(void) {
  //Inicializações
  pinMode(greenLed,OUTPUT);
  pinMode(yellowLed,OUTPUT);
  pinMode(redLed,OUTPUT);
  timerGreen.begin(0); 
  timerYellow.begin(0); 
  timerRed.begin(0); 
  timerContador.begin(0);
  Serial.begin(9600);
}
	

void loop(void)	{
	
  if (timerGreen.onTimeout(2000)) { // Acende/Apaga led Verde a cada 2 segundos
		digitalWrite(greenLed,!digitalRead(greenLed));
  }

  if (timerYellow.onTimeout(4000)) { // Acende/Apaga led Amarelo a cada 4 segundos
    digitalWrite(yellowLed,!digitalRead(yellowLed));
  }

  if (timerRed.onTimeout(10000)) { // Acende/Apaga led Vermelho a cada 10 segundos
    digitalWrite(redLed,!digitalRead(redLed));
  }
  
  if (timerContador.onTimeout(1000)) { //Imprime a contagem regressiva no monitor serial a cada 1 segundo 
    Serial.println((contador > 1) ? --contador : contador = 10);
  }

}

Outras alternativas

  • ArduinoThread – Simula ao uso de Threads permitindo schedular tarefas com tempos variáveis entre elas
  • Timing Libraries – Uma lista de bibliotecas com o tema “Controle de Tempo”;

Referências

  • Tutorial Adafruit – Excelente tutorial sobre Multi-tasking e millis no Arduino;
  • Blink sem delay – Sketch de exemplo do site oficial do Arduino

Conclusão

A biblioteca que analisamos é muito simples e apenas encapsula em uma classe o que já vimos em vários sites por aí . No entanto, sua vantagem é o pouco espaço em memória utilizado e a facilidade de uso.

Espero ter sido útil.
Até a próxima…

O post Controlando Intervalos de Tempo com Arduino apareceu primeiro em BlogDoJoséCintra.



This post first appeared on BlogDoJoséCintra, please read the originial post: here

Share the post

Controlando Intervalos de Tempo com Arduino

×

Subscribe to Blogdojosécintra

Get updates delivered right to your inbox!

Thank you for your subscription

×