# Acionamento de LED por botão com cronômetro no LCD

**URL:** <https://forum.fazedores.com/t/acionamento-de-led-por-botao-com-cronometro-no-lcd/6599>\
**Category:** Eletrônica\
**Created:** [Agosto 11, 2019, 2:31am UTC](https://forum.fazedores.com/t/acionamento-de-led-por-botao-com-cronometro-no-lcd/6599 "2019-08-11T02:31:50Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![viniciusglit](https://avatars.discourse-cdn.com/v4/letter/v/53a042/32.png) [@viniciusglit](https://forum.fazedores.com/u/viniciusglit)\
**Post date:** [Agosto 11, 2019, 2:31am UTC](https://forum.fazedores.com/t/acionamento-de-led-por-botao-com-cronometro-no-lcd/6599/1 "2019-08-11T02:31:50Z")

</div>

Boa noite pessoal, estou montando o seguinte projeto:

-Acionamento do LED por um botão.  
-Quando o botão para ligar o LED for acionado, inicia um cronômetro mostrando o tempo que o LED fica aceso.  
-O cronômetro é mostrado em um LCD 1602 com I2C.

Porém estou com algumas dificuldades:

-Quando o botão é acionado, o LED acende mas o cronômetro para e volta a funcionar depois que o LED apaga.  
-Quero usar uma variável para o tempo, mas percebi que ela funciona apenas até 32 segundos.

E uma dúvida:

-É possível fazer com que o cronômetro faça uma contagem regressiva do tempo que falta para o LED apagar?

Comecei a mexer com arduino a pouco tempo e estou com as dificuldades acima, alguém pode me dar uma ajuda do que fazer para corrigir?

Segue o esquema do circuito montado (não tem o LCD com módulo I2C para colocar no esquema):

 ![Anota%C3%A7%C3%A3o%202019-08-10%20232913](https://us1.discourse-cdn.com/flex016/uploads/fazedores/original/2X/7/7513aa3f242992d3b2b5d11aa41dcdb9d25bb965.png)

Segue o código que estou usando:  
#include \<Wire.h\>  
#include \<LiquidCrystal\_I2C.h\>  
LiquidCrystal\_I2C lcd(0x27,4,5);

// Variáveis para o cronômetro  
int horas = 0;  
int minutos = 0;  
int segundos = 0;  
int decimas = 0;  
long milisegundos = 0;

//Variáveis INPUT e OUTPUT  
int botao = 9; // botão  
int led = 10; // LED

//Variável tempo em SEGUNDOS (s)  
int tempo = 33; // ALTERAR O TEMPO DO LED ACESO APENAS AQUI

void setup()  
{

Wire.begin();  
Serial.begin(9600);  
pinMode(botao, INPUT);

// Inicialização do LED

lcd.init();  
lcd.clear();  
lcd.begin(16,2);  
lcd.backlight();

pinMode(led, OUTPUT);

}  
void loop()  
{

//Inicializando o cronômetro

if(digitalRead(botao) == HIGH)  
{  
horas = 0;  
minutos = 0;  
segundos = 0;  
decimas = 0;  
lcd.clear();  
}

milisegundos = millis();

if(milisegundos % 100 == 0)  
{  
decimas++;

if(decimas == 10)  
{  
decimas = 0;  
segundos++;  
}

if(segundos == 60)  
{  
segundos = 0;  
minutos++;  
}

if(minutos == 60)  
{  
minutos = 0;  
horas++;  
}

// Mostrando o tempo no LCD

lcd.setCursor(0,0);

if(horas \< 10)  
{  
lcd.print(“0”);  
}  
lcd.print(horas);  
lcd.print(":");  
lcd.setCursor(3,0);

if(minutos \< 10)  
{  
lcd.print(“0”);  
}  
lcd.print(minutos);  
lcd.print(":");  
lcd.setCursor(6,0);

if(segundos \< 10)  
{  
lcd.print(“0”);  
}  
lcd.print(segundos);  
lcd.print("(");  
lcd.setCursor(9,0);  
lcd.print(decimas);  
lcd.print(")");  
}

if (digitalRead(botao) == HIGH) {  
digitalWrite(led, HIGH);  
delay(tempo\*1000);  
} else {  
digitalWrite(led, LOW);  
}

}

---

<div class="post-metadata">

**Author:** ![Arnold\_Rudge](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/arnold_rudge/32/1675_2.png) [@Arnold\_Rudge](https://forum.fazedores.com/u/Arnold_Rudge)\
**Post date:** [Agosto 12, 2019, 12:09am UTC](https://forum.fazedores.com/t/acionamento-de-led-por-botao-com-cronometro-no-lcd/6599/2 "2019-08-12T00:09:35Z")

</div>

O código dentro do void loop acontece tão rápido , tipo 50 milli segundos ,então ele detecta que você apertou o botão, e antes de você soltar o botão ele já detectou o segundo toque… Então você tem que considerar colocar meio segundo de delay e começar o contador já em meio segundo , ou colocar 2 botões . Considera também um “debounce”
