Interrupções utilizando TimerOne.h

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

#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

/*
 * 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

/*
 * 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)