Rapaziada, bom dia.
Estou com certa dificuldade para entender um problema no meu sketch de ligar e desligar o sistema com temporizador (que no meu caso exemplificado com o acionamento de um led). Ao pressionar o push button por 5 segundos o led liga. Ao pressionar novamente durante 5 segundos o led desliga.
O sketch funciona perfeitamente.
So que ha um erro!
Quando o led ligado, ao pressionar umas vez o botao (o led nao desliga) e em seguida segurar durante 5 segundos ele desliga, porem começa a dar erro, ligando e desligando.....
alguem pode me ajudar?
https://uploaddeimagens.com.br/imagens/botao_onoff_com_temporizador_para_ligar-jpeg
segue o codigo:
#define buttonPin 13
#define ledligado 8
#define debounce 20
#define holdTime 2000
int buttonVal = 0;
int buttonLast = 0;
long btnDnTime;
long btnUpTime;
boolean ignoreUp = false;
void setup()
{
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, LOW );
pinMode(ledligado, OUTPUT);
digitalWrite(ledligado, LOW);
}
void loop()
{
buttonVal = digitalRead(buttonPin);
if (buttonLast == HIGH && buttonVal == LOW && (millis() - btnDnTime) > long(debounce))
{
btnUpTime = millis();
}
if (buttonLast == LOW && buttonVal == HIGH && (millis() - btnUpTime) > long(debounce))
{
btnDnTime = millis();
}
if (buttonVal == HIGH && (millis() - btnDnTime) > long(holdTime))
{
event1();
ignoreUp = true;
btnDnTime = millis();
}
if (buttonVal == HIGH && (millis() - btnUpTime) > long(holdTime))
{
event2();
ignoreUp = true;
btnUpTime = millis();
}
buttonLast = buttonVal;
delay:500;
}
void event1()
{
digitalWrite(ledligado,HIGH);
delay:500;
}
void event2()
{
digitalWrite(ledligado, LOW);
delay:500;
}