#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço I2C do LCD pode variar
const int coinPin = 2;
const int buttonPin = 3;
const int ledPin = 13;
int credit = 0;
int plays = 0;
int lastCoinState = LOW;
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 200; // Ajuste o tempo de debounce se necessário
const char* figures[] = {"@", "#", "$"};
const int numFigures = 3;
void setup() {
pinMode(coinPin, INPUT);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
lcd.begin(16, 2); // Define as dimensões do display LCD
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Insira Moeda");
}
void loop() {
int coinState = digitalRead(coinPin);
int buttonState = digitalRead(buttonPin);
// Detectar inserção de moeda com debounce
if (coinState == HIGH && lastCoinState == LOW && (millis() - lastDebounceTime) > debounceDelay) {
credit += 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Credito: ");
lcd.print(credit);
lastDebounceTime = millis(); // Atualizar o tempo de debounce
}
lastCoinState = coinState;
// Detectar pressionamento do botão
if (buttonState == HIGH && lastButtonState == LOW && credit > 0) {
playGame();
credit -= 1;
plays += 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Credito: ");
lcd.print(credit);
}
lastButtonState = buttonState;
}
void playGame() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Jogando...");
int fig1, fig2, fig3;
for (int i = 0; i < 5; i++) { // Loop para criar o efeito de rotação
fig1 = random(numFigures);
fig2 = random(numFigures);
fig3 = random(numFigures);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(figures[fig1]);
lcd.setCursor(6, 0);
lcd.print(figures[fig2]);
lcd.setCursor(12, 0);
lcd.print(figures[fig3]);
delay(500); // Tempo de atraso para a rotação
}
// Na décima jogada, garantir que as figuras coincidam
if (plays % 10 == 0) {
fig1 = fig2 = fig3 = random(numFigures);
}
// Exibir o resultado por 4 segundos
delay(4000);
// Checar se as figuras coincidem
if (fig1 == fig2 && fig2 == fig3) {
credit += 2; // Adicionar 2 reais de crédito
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Voce ganhou!");
lcd.setCursor(0, 1);
lcd.print("Credito: ");
lcd.print(credit);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(figures[fig1]);
lcd.setCursor(6, 0);
lcd.print(figures[fig2]);
lcd.setCursor(12, 0);
lcd.print(figures[fig3]);
lcd.setCursor(0, 1);
lcd.print("Nao ganhou");
}
delay(4000); // Manter a mensagem visível por 4 segundos
}