Neste projeto vamos fazer um Jogo de Pedra Papel e Tesoura (ou jo ken po) com o Arduino UNO e um Shield LCD Keypad da DFRobot
Apresentação: Júlio Vansan Gonçalves
Materiais:
- Arduino UNO
- Shield LCD Keypad da DFRobot
- Cabo USB
Para Comprar
Shield LCS Keypad da DFRobot
https://produto.mercadolivre.com.br/MLB-1434240145-display-lcd-keypad-shield-16×2-botoes-arduino-_JM
Link códigos usados no vídeo
/* *************************
* Projeto Bacana - 10/2021
* www.projetobacana.com.br
* Júlio Vansan Gonçalves
* ************************
* Jogo Pedra Papel e Tesoura, baseado na biblioteca <LiquidCrystal.h>
* Placa Arduino UNO
* com Shield de LCD com teclas DF ROBOT
*/
#include <LiquidCrystal.h>
// Selecione os pinos que serão usados para o LCD, se for usar o Shield não altere !
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Definições de Variaveis e botões do painel
int lcd_key = 0;
int adc_key_in = 0;
int escolhaArduino = 0;
int escolhaJogador;
int delayResultado=2000;
int delayPlacar=1500;
int placarJogador=0;
int placarArduino=0;
#define btnTESOURA 0
#define btnOK 1
#define btnPAPEL 2
#define btnPEDRA 3
#define btnSELECT 4
#define btnNONE 5
// Função de Leitura dos Botões
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // Leitura do valor recebido pelos botões
// Os valores dos botoes estão abaixo, pode ter variações de valores
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnTESOURA;
if (adc_key_in < 150) return btnOK;
if (adc_key_in < 300) return btnPAPEL;
if (adc_key_in < 450) return btnPEDRA;
if (adc_key_in < 700) return btnSELECT;
return btnNONE; // Se nenhum botão for pressionado retorna este valor
}
// Função que mostra o resultado no LCD
int resultado(){
lcd.setCursor(0,0);
lcd.print(" x ");
lcd.setCursor(0,0);
if (escolhaArduino == 1) lcd.print("Pedra");
if (escolhaArduino == 2) lcd.print("Papel");
if (escolhaArduino == 3) lcd.print("Tesoura");
lcd.setCursor(9,0);
if (escolhaJogador == 1) lcd.print(" Pedra");
if (escolhaJogador == 2) lcd.print(" Papel");
if (escolhaJogador == 3) lcd.print("Tesoura");
}
// Função que mostra a tela inicial
int telaInicial(){
lcd.setCursor(0,0);
lcd.print("Projeto Bacana ");
escolhaArduino = 0;
}
//Função que verifica todas as possibilidades do jogo e mostra quem ganhou
int jogo()
{
if (((escolhaJogador == 1) && (escolhaArduino == 1)) || ((escolhaJogador == 2) && (escolhaArduino == 2)) || ((escolhaJogador == 3) && (escolhaArduino == 3))){
lcd.setCursor(0,1);
lcd.print("-> Empatamos! <-");
resultado();
delay(delayResultado);
telaInicial();
}
if ((escolhaJogador == 1) && (escolhaArduino == 2)){
lcd.setCursor(0,1);
lcd.print("Eu Ganhei !! ");
placarArduino ++;
resultado();
delay(delayResultado);
telaInicial();
}
if ((escolhaJogador == 1) && (escolhaArduino == 3)){
lcd.setCursor(0,1);
lcd.print("Voce Venceu ! ");
placarJogador ++;
resultado();
delay(delayResultado);
telaInicial();
}
if ((escolhaJogador == 2) && (escolhaArduino == 1)){
lcd.setCursor(0,1);
lcd.print("Voce Venceu ! ");
placarJogador ++;
resultado();
delay(delayResultado);
telaInicial();
}
if ((escolhaJogador == 2) && (escolhaArduino == 3)){
lcd.setCursor(0,1);
lcd.print("Eu Ganhei !! ");
placarArduino ++;
resultado();
delay(delayResultado);
telaInicial();
}
if ((escolhaJogador == 3) && (escolhaArduino == 1)){
lcd.setCursor(0,1);
lcd.print("Eu Ganhei !! ");
placarArduino ++;
resultado();
delay(delayResultado);
telaInicial();
}
if ((escolhaJogador == 3) && (escolhaArduino == 2)){
lcd.setCursor(0,1);
lcd.print("Voce Venceu ! ");
placarJogador ++;
resultado();
delay(delayResultado);
telaInicial();
}
}
void setup()
{
lcd.begin(16, 2); // Inicia a Biblioteca
// Mensagens iniciais sem utilidade prática !!!
lcd.setCursor(0,0);
lcd.print("Julio Vansan");
lcd.setCursor(0,1);
lcd.print("Apresenta . . . . . ");
delay(delayPlacar);
lcd.setCursor(0,0);
lcd.print("Projeto Bacana ");
lcd.setCursor(0,1);
lcd.print("................ ");
delay(delayPlacar);
}
void loop()
{
lcd.setCursor(0,1);
lcd_key = read_LCD_buttons(); // Leitura dos botões
switch (lcd_key) // Dependendo do botão pressionado, uma ação será executada.
{
case btnTESOURA:
{
lcd.print("-->> Tesoura "); // Antes de iniciar o Jogo exibe a mensagem do botão correspondente
escolhaJogador=3;
jogo();
break;
}
case btnPEDRA:
{
lcd.print("-->> Pedra "); // Antes de iniciar o Jogo exibe a mensagem do botão correspondente
escolhaJogador=1;
jogo();
break;
}
case btnOK:
{
lcd.print("Estou Escolhendo ");
escolhaArduino=random(1,4); // Enquanto botão pressionado, o arduino irá escolher numeros aleatórios entre 1 e 3
break;
}
case btnPAPEL:
{
lcd.print("-->> Papel "); // Antes de iniciar o Jogo exibe a mensagem do botão correspondente
escolhaJogador=2;
jogo();
break;
}
case btnSELECT: // mostra o placar do Jogo
{
lcd.setCursor(0,0);
lcd.print("Atencao . . . . ");
lcd.setCursor(0,1);
lcd.print(" Resultados ");
delay(delayPlacar);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
// delay(delayPlacar/2); //tempo para suspense
lcd.setCursor(0,0);
lcd.print("Eu = ");
lcd.setCursor(8,0);
lcd.print(placarArduino);
lcd.setCursor(0,1);
lcd.print("Voce = ");
lcd.setCursor(8,1);
lcd.print(placarJogador);
delay(delayResultado);
telaInicial();
break;
}
case btnNONE:
{
if (escolhaArduino == 0)
lcd.print("UP Para Iniciar! "); // Se não for pressionado a tecla ok , mostra esta mensagem
else
lcd.print("Pode Escolher !! "); // se o arduino já escolheu o numero, fica esperando sua jogada
break;
}
}
}
#Projeto #arduino #Jogo #PedraPapelTesoura #jokenpo #DIY #maker #microcontrolador #façavocemesmo
—
Curta, compartilhe e inscreva-se para ficar atualizado com os nossos conteúdos!
Para saber mais sobre o Canal Projeto Bacana:
E-mail: contato@projetobacana.com.br
Site: https://www.projetobacana.com.br/
Facebook: https://www.facebook.com/projetobacana.com.br
Instagram: https://www.instagram.com/projetobacana.com.br/
Youtube: https://www.youtube.com/channel/UC0e1bfaL0-gnAP2KQA5vxqQ