Ir ao conteúdo
  • Cadastre-se

Como controlar timer no arduino ?


Posts recomendados

Olá, estou usando o arduíno para poder  circuitos elétricos de iluminação e motores tendo todo controle de acionamento e desligamento pelo cell.

Agora, estou tentando fazer com que quando eu acione o RELE1 comece a contar 10segundos, após esses 10segundos acionasse o RELE2. Alguém poderia me ajudar mostrando como devo fazer para colocar esse tempo ??

 

Sketch que utilizo para o controle dos reles: 

 

 

#include <SoftwareSerial.h>   //Inlcui a biblioteca SoftwareSerial.h

 

#define RxD         6 //Define RxD como 6
#define TxD         7 //Define TxD como 7

 

#define RELE_1    2 //LED_AMARELO_BLINK como 2
#define RELE_2    3 //LED_VERMELHO_FADE como 3
 

 

SoftwareSerial blueToothSerial(RxD,TxD); //Instância a biblioteca SoftwareSerial.h

 

void setup()
{

  pinMode(RELE_1, OUTPUT); //Configura o pino 2 como saída
  pinMode(RELE_2, OUTPUT); //Configura o pino 3 como saída
  

parear_dispositivo(); //Executa a função para parear o dispositivo
}

 

void loop()
{
  char letra; //Variável char para armazenar o caractere recebido

if(blueToothSerial.available()) //Se algo for recebido pela serial do módulo bluetooth
    {
      letra = blueToothSerial.read(); //Armazena o caractere recebido na variável letra

if(letra == 'A'digitalWrite(RELE_1, HIGH); //Se o caractere recebido for a letra A, liga o RELE_1
      else if(letra == 'a'digitalWrite(RELE_1, LOW); //Senão se o caractere recebido for a letra a, desliga o RELE_1
      else if(letra == 'B'digitalWrite(RELE_2, HIGH); //Senão se o caractere recebido for a letra B, liga o RELE_2
      else if(letra == 'b'digitalWrite(RELE_2, LOW); //Senão se o caractere recebido for a letra b, delisga o RELE_2
     
}

 

void parear_dispositivo()
{
  blueToothSerial.begin(38400); // Configura o baud rate do bluetooth como 38400
  blueToothSerial.print("\r\n+STWMOD=0\r\n"); // Configura o módulo bluetooth para trabalhar como slave
  blueToothSerial.print("\r\n+STNA=SeedBTShield\r\n"); // Configura o nome do disopsitivo bluetooth
  blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permite que outros dispositivos encontrem o módulo bluetooth
  blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Desabilita a auto conexão
  delay(2000); // Aguarda 2 segundos
  blueToothSerial.print("\r\n+INQ=1\r\n"); // Habilita modo de paridade
  delay(2000); // Aguarda 2 segundos
  blueToothSerial.flush(); // Dá um flush na serial do módulo bluetooth
}'

Link para o comentário
Compartilhar em outros sites

Você pode utilizar de Delay.

 

delay(1000); /// 1000ms = 1seg

 

Vou adiantando pois sei que terá esta dúvida no futuro, assim como eu tive no inicio.

 

 

Quando você utiliza a função delay, todo seu processamento para, espera o delay e logo após continua o código, uma pausa em outras palavras, porém quando é necessário utilizar de um delay, sem que o processamento por inteiro pare, como uma thread você pode utilizar da função millis, que pega a quantidade de milissegundos desde que a sketch iniciou.

 

 

if(millis() > 0){    // Caso o contador de milissegundos for maior que 0, inicia este código} 

 

 

veja mais aqui.

 

http://playground.arduino.cc/referencia/millis

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
Boa noite,

 

Migrei dos microcontroladores PIC para a plataforma Arduino e também senti falta da praticidade dos diferentes Timers disponíveis no PIC.

 

Se puder usar a função delay() tá resolvido! É só abrir a chave da condição IF e escrever:

 

if(letra == 'A') { 

      digitalWrite(RELE_1, HIGH);

     delay(10000); //espera 10 mil milisegundos = 10 segundos

      digitalWrite(RELE_2, HIGH);

}

 

Só que, conforme o colega Lucas Fraga apontou, a função delay pausa o controlador. E não conseguirá fazer leituras ou enviar comandos durantes esses 10 segundos.

 

Uma saída para contornar a situação é a função millis(), também mencionada pelo Lucas. Ela tem que ser estudada com tempo, e provavelmente com algum esforço, conseguiria escrever a rotina que necessita.

 

Uma terceira opção é biblioteca Timer disponível no próprio site do Arduino: http://playground.arduino.cc/code/timer

 

Tenho planos de usá-la em alguns projetos que tenho em mente, mas ainda não consegui dedicar tempo para estudá-la.

 

Talvez consiga a solução que precisa por ela.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...