#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
/**
* Pino do botão
*/
const int button = 32;
/**
* Objeto do display LCD com endereço I2C 0x27 e dimensões 16x2
*/
LiquidCrystal_I2C lcd(0x27, 16, 2);
/**
* Inicializa o setup do Arduino.
* - Define a taxa de comunicação serial como 115200.
* - Configura o pino do botão como entrada com resistor pull-up interno.
* - Inicializa o LCD e acende a luz de fundo.
* - Semeia o gerador de números aleatórios usando uma leitura analógica do pino 0.
*/
void setup() {
Serial.begin(115200);
pinMode(button, INPUT_PULLUP);
lcd.init();
lcd.backlight();
randomSeed(analogRead(0));
}
/**
* Loop principal que roda continuamente após o setup.
* - Exibe a tela inicial.
* - Aguarda o pressionamento do botão para rolar os dados e avaliar o resultado.
* - Exibe o resultado com base na soma de dois dados.
*/
void loop() {
telaInicial();
if (digitalRead(button) == LOW) {
int dado1 = jogarDado();
int dado2 = jogarDado();
int somaDados = dado1 + dado2;
int somaAnterior = somaDados;
lcd.clear();
if (somaDados == 7 || somaDados == 11) {
lcd.setCursor(4, 0);
lcd.print("VENCEDOR!");
lcd.setCursor(0, 1);
lcd.print("soma dos dados:");
lcd.print(somaDados);
} else if (somaDados == 2 || somaDados == 3 || somaDados == 12) {
lcd.setCursor(4, 0);
lcd.print("PERDEDOR!");
lcd.setCursor(0, 1);
lcd.print("soma dos dados:");
lcd.print(somaDados);
} else {
lcd.setCursor(0, 1);
lcd.print("pontos: ");
lcd.print(somaDados);
delay(3000);
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("JOGUE");
lcd.setCursor(3, 1);
lcd.print("NOVAMENTE!!!");
delay(3000);
do {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aperte o botao!");
delay(1000);
lcd.clear();
} while (digitalRead(button) == HIGH);
dado1 = jogarDado();
dado2 = jogarDado();
somaDados = dado1 + dado2;
if (somaDados == somaAnterior) {
lcd.setCursor(3, 0);
lcd.print("VOCE GANHOU!!");
lcd.setCursor(5, 1);
lcd.print("dados: ");
lcd.print(somaDados);
} else {
lcd.setCursor(3, 0);
lcd.print("VOCE PERDEU!!");
lcd.setCursor(5, 1);
lcd.print("dados: ");
lcd.print(somaDados);
}
}
delay(3000);
lcd.clear();
}
}
/**
* Exibe a tela inicial com instruções sobre como jogar.
* @return Sempre retorna 0.
*/
int telaInicial() {
lcd.setCursor(1, 0);
lcd.print("Aperte o botao");
lcd.setCursor(5, 1);
lcd.print("para jogar");
return 0;
}
/**
* Simula o lançamento de um dado.
* @return Um número inteiro aleatório entre 1 e 6 (inclusivo).
*/
int jogarDado() {
return random(1, 7);
}