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.
A timerOne não serve para o que pretendes.
Experimenta ver a função millis() e o exemplo blinkwithoutdelay.
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)