Pages: [1]   Go Down
Author Topic: Interrupções utilizando TimerOne.h  (Read 698 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Galera, sou iniciante em arduino e estou com algumas dúvidas. Eu estou tentando fazer um semáforo interativo sem usar o delay (). Pesquisei na internet algumas formas de substituir o uso do mesmo e vi alguns blogs falando sobre a biblioteca TimerOne.h. Meu problema é o seguinte,  no meu setup () eu inicializo meu Timer com 10 segundos, no caso eu estipulo esse tempo, pois quero que o LED verde do semáforo dos carros fique aceso juntamente com o LED vermelho do semáforo dos pedestres durante este tempo ou até o pedestre apertar o botão solicitando que mude o sinal dos semáforos, isso num intervalo entre 5~10 segundos. Só que quando este tempo acaba ou o botão é acionado, eu preciso mudar os estados dos LEDS e mudar o período da minha interrupção também, seria algo como simular um delay (), para que outros LED's fiquem acesos durante um período e depois eu possa mudar os estados novamente, e assim sucessivamente. Sempre manipulando o tempo. Eu já usei diversas funções dessa biblioteca, tais como: restart (), start(), stop (), setPeriod (), e não consegui ter os resultados que citei a cima. Se alguém puder me ajudar, com algum código exemplo em que eu consigo fazer essa manipulação, eu agradeço.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3221
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A timerOne não serve para o que pretendes.

Experimenta ver a função millis() e o exemplo blinkwithoutdelay.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

      Olha eu também estava precisando uma vez de um temporizador, então resolvi fazer uma biblioteca, baseada na função millis(), não terminei ela ainda, por isso os códigos estão sem comentários , testei ela e funcionou, não fiz teste de precisão, atraso, Memoria Sram, Flash etc. Porem talvez possa te ajudar.

Código Principal

Teste_Temporizador
Code:
#include"Temporizador.h"//Importa Biblioteca
Temporizador Temp1; // Declaração de Objeto
//Função Setup
void setup()
{

}

// Fução Loop
void loop()

  Temp1.Iniciar(1000);//Inicia Temporizador, Tempo em milisegundos
  if (Temp1.Saida==1){//Verifica se o temporizador finalizou
    //Executa a função desejada   
    Temp1.Reset=1;//Reseta o Temporazidor para uma nova contagem
  }
}



Biblioteca

Temporizador.ino
Code:
/*
 * Temporizador.cpp
 *
 *  Created on: 20/02/2014
 *      Author: paulo
 */

#include <Temporizador.h>
#include "Arduino.h"

Temporizador::Temporizador() {
  // TODO Auto-generated constructor stub
  Saida=0;
  Tempo_transcorrido=0;
  temp_Prox=0;
  temp_Atual=0;
  v_inicial=0;
}

Temporizador::~Temporizador() {
  // TODO Auto-generated destructor stub
}

void Temporizador::Iniciar(unsigned int Tempo_D){
 
  temp_Atual=millis();
 
  if (v_inicial==0){
  temp_Prox=millis();
  }
  v_inicial=1;
  if (temp_Atual-temp_Prox < 0){
    temp_Prox=0;
  }
  if (temp_Atual-temp_Prox >= Tempo_D){
    temp_Prox=temp_Atual;
    Saida=1;
  } 
  if (Reset==1){
    Saida=0;
    v_inicial=0;
    Reset=0;   
  }
  Tempo_transcorrido=temp_Atual-temp_Prox;

}


Temporizador.h
Code:
/*
 * Temporizador.h
 *
 *  Created on: 20/02/2014
 *      Author: paulo
 */

#ifndef TEMPORIZADOR_H_
#define TEMPORIZADOR_H_

class Temporizador {
private:
  void debug();
public:
  Temporizador();
  virtual ~Temporizador();
  void Iniciar(unsigned int Tempo_D);
  int Saida;
  int Reset;
  int v_inicial;
  int Tempo_transcorrido;
  unsigned long temp_Prox;
  unsigned long temp_Atual;

};

#endif /* TEMPORIZADOR_H_ */

* Teste_Temporizador.rar (1.17 KB - downloaded 10 times.)
Logged

Pages: [1]   Go Up
Jump to: