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)