/*
Contagem de tempo com incremento ou decremento
*/
int botaoInc = 0, botaoDec = 0; //Essa variável armazena o estado atual do meu botão
int estado_anterior_inc = 0, estado_anterior_dec = 0; //Essa variável vai armazenar o estado anterior que o meu botão estava.
int tempo = 0; //Essa variável será para definir o tempo de atrasao
void setup()
{
//Lógica de contagem com um botão
pinMode(16, INPUT); //Pino do botão de incremento configurado como entrada digital
pinMode(17, INPUT); //Pino do botão de decremento configurado como entrada digital
pinMode(21, OUTPUT); //Pino do LED configurado como saída digital
Serial.begin(115200); //Inicializo a comunicação serial para enviar valores ou receber no monitor serial
}
void loop()
{
botaoInc = digitalRead(16); //Leia o estado do botao incremento (0)
botaoDec = digitalRead(17); //Leia o estado do botao decremento (0)
//Lógica para incrementar o valor da contagem
//------------------------------------------------------------------------
if(botaoInc == 1 && estado_anterior_inc == 0) //botaoInc = 0 e estado_anterior_inc = 0
{//Significa que eu apertei o botao
tempo=tempo+100; //Incrementa o valor da contagem do tempo
estado_anterior_inc = 1; //Atualizando o novo estado anterior para acionado
Serial.println(tempo);
if(tempo >= 2000)
{
tempo = 2000;
}
}
//botao = 0 e estado_anterior = 0
if(botaoInc == 0 && estado_anterior_inc == 1) //O estado atual do meu botão é desacionado e anteriormente ele estava acionado?
{//Significa que eu retirei o dedo do botao
estado_anterior_inc = 0; //Atualizar o estado anterior do meu botão. Agora seu estado é zero
}
//Lógica para decrementar o valor da contagem
//-------------------------------------------------------------------------
if(botaoDec == 1 && estado_anterior_dec == 0) //botaoDec = 0 e estado_anterior_dec = 1
{//Significa que nesse momento eu apertei o botao e no loop anterior ele estava solto
Serial.println(tempo);
tempo--; //Decrementa o valor da contagem
estado_anterior_dec = 1; //Atualizando o novo estado anterior para acionado
if(tempo <= 0)
{
tempo = 0;
}
}
//botaoDec = 0 e estado_anterior_dec = 1
if(botaoDec == 0 && estado_anterior_dec == 1) //O estado atual do meu botão é desacionado e anteriormente ele estava acionado?
{//Significa que eu retirei o dedo do botao
estado_anterior_dec = 0; //Atualizar o estado anterior do meu botão. Agora seu estado é zero
}
digitalWrite(21, HIGH);
delay(tempo);
digitalWrite(21, LOW);
delay(tempo);
}