#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicializa o LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Botões
const int botaoTimeA = 7;
const int botaoTimeB = 8;
// LEDs para sinalizar gol
const int ledTimeA = 9;
const int ledTimeB = 10;
// Buzzer
const int buzzer = 6;
// Contadores de gols
int golsTimeA = 0;
int golsTimeB = 0;
// Debounce
unsigned long ultimoTempoA = 0;
unsigned long ultimoTempoB = 0;
const unsigned long debounceDelay = 200;
void setup() {
// Configura botões
pinMode(botaoTimeA, INPUT_PULLUP);
pinMode(botaoTimeB, INPUT_PULLUP);
// Configura LEDs e buzzer
pinMode(ledTimeA, OUTPUT);
pinMode(ledTimeB, OUTPUT);
pinMode(buzzer, OUTPUT);
// Inicializa LCD
lcd.begin(16, 2);
lcd.backlight(); // liga a luz de fundo do LCD
lcd.setCursor(0, 0);
lcd.print("Placar de Jogo");
delay(2000);
atualizarPlacar();
}
void loop() {
unsigned long tempoAtual = millis();
// Gol Time A
if(digitalRead(botaoTimeA) == LOW && tempoAtual - ultimoTempoA > debounceDelay){
golsTimeA++;
piscarLed(ledTimeA);
tocarBuzzer();
atualizarPlacar();
ultimoTempoA = tempoAtual;
}
// Gol Time B
if(digitalRead(botaoTimeB) == LOW && tempoAtual - ultimoTempoB > debounceDelay){
golsTimeB++;
piscarLed(ledTimeB);
tocarBuzzer();
atualizarPlacar();
ultimoTempoB = tempoAtual;
}
}
// Atualiza o placar no LCD
void atualizarPlacar(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time A: ");
lcd.print(golsTimeA);
lcd.setCursor(0, 1);
lcd.print("Time B: ");
lcd.print(golsTimeB);
}
// Pisca LED quando há gol
void piscarLed(int led){
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
}
// Toca o buzzer rapidamente para sinalizar gol
void tocarBuzzer(){
tone(buzzer, 1000, 200);
}