Olá estou iniciando na programação em Arduíno,e estou tentando construir um protótipo que dê um alarme quando o botão de ligar for apertado duas ou mais vezes em menos de 15 segundos .O alarme será dado através de um led piscante.Estou tendo problemas com relação ao tempo ,gostaria de saber se tem algum erro lógico no seguinte código:
#include "TimerOne.h"
const byte pinLED1 =12;
const byte botaoAcende = 2;
const byte botaoApaga = 3;
unsigned long tempoAtual = 0, tempoInicio = 0;
const unsigned long tempoAceso = 15000;
int contador = 0;
volatile boolean estado = 0;
void setup() {
pinMode(pinLED1, OUTPUT);
pinMode(botaoAcende, INPUT);
pinMode(botaoApaga, INPUT);
attachInterrupt(digitalPinToInterrupt(botaoApaga),ApagaLED, FALLING);
//attachInterrupt(digitalPinToInterrupt(botaoAcende),AcendeLED, FALLING);
/Usando a interrupção por tempo fazemos o led inverter o estado aceso e apagado a cada 1 seg/
Timer1.initialize();
Timer1.attachInterrupt(pisca, 1000);
}
void loop() {
/Verifica se o botão foi pressionado/
estado = digitalRead(botaoAcende);
/Se ele apertou o botão/
if(estado == HIGH ){
tempoInicio = millis();
contador = contador++;
/Se ele apertar 2 vezes o botão e o tempo for menor do que 15 segundos/
if((contador >= 2) && ((tempoInicio-tempoAtual) <= tempoAceso))
{
AcendeLED();
tempoAtual = tempoInicio;
}else{
digitalWrite(pinLED1, LOW);
}
}
/Se passar 15 segundos ele deve zerar o contador/
if((tempoInicio-tempoAtual) >= tempoAceso)
{
contador = 0;
}
}
void ApagaLED(){
digitalWrite(pinLED1, LOW);
tempoAtual = tempoInicio;
}
void AcendeLED(){
digitalWrite(pinLED1, estado);
}
void pisca()
{
estado ^= 1;
}