Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino UNO | 1 | |
| Matriz de Pontos LED MAX7219 | 1 | |
| Teclado de Membrana | 1 |
Ferramentas Necessárias
- Pistola de cola quente
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Olá, Comunidade Hackster. Sou Simone Adobs e este é meu terceiro projeto no Hackster. É meu primeiro projeto onde crio uma estrutura com papelão, papel e cola quente, que contém o Arduino e outros componentes.
Este é um vídeo curto mostrando como o Jogo da Velha funciona:
Aqui você pode ver o projeto de todos os ângulos:
Como o Jogo da Velha Funciona?
A resposta é simples: quando você pressiona um número no teclado, o Arduino acende o quadrado correspondente.
- Posso alternar jogadores? Sim, ao acender um quadrado, o Arduino alterna instantaneamente para a vez do próximo jogador.
- O Arduino reconhece quando eu ganho? Sim, quando um jogador vence, o Arduino escreve na Matriz de Pontos LED: "1" se o vencedor for o jogador 1; "2" se for o jogador 2.
- Quando o jogo acaba, posso reiniciar por um botão? Sim, pressionando o botão "0" no teclado, o Arduino reinicia o jogo.
Como Reconhecer um Jogador?
Embora a Matriz LED seja apenas vermelha, cada jogador tem um padrão específico formado por LEDs 2x2:
- Jogador 1: padrão "\\" (barra invertida)
- Jogador 2: padrão "/" (barra normal)
Para dúvidas, sugestões, críticas ou explicações do código, sinta-se à vontade para comentar. Se gostou, deixe um like e veja meus outros projetos!
Tente fazer outra estrutura ou personalizar a minha e me envie uma foto!
Tenha um BOM DIA!
Simone da Itália <3
Código
Tech-Tris
#include
#include
#include
#include
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
LedControl lc = LedControl(12, 10, 11, 1);
bool player1 = true;
bool q1=false, q2=false, q3=false, q4=false, q5=false, q6=false, q7=false, q8=false, q9=false;
int row, col, rowPlays, colPlays, result, player, winner;
char hexaKeys[4][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
int plays[3][3] = {
{0,0,0},
{0,0,0},
{0,0,0}
};
byte rowPins[4] = {8, 7, 6, 5};
byte colPins[3] = {4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, 4, 3);
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 0);
lc.clearDisplay(0);
}
void loop() {
int customKey = customKeypad.getKey();
painting(customKey);
win(result);
if (winner == 1) {
lc.clearDisplay(0);
while (winner == 1) {
char customKey = customKeypad.getKey();
if (customKey == '0') {
Reset_AVR();
}
// Desenha número 1 na matriz
lc.setLed(0,1,4,true);
lc.setLed(0,2,5,true);
lc.setLed(0,3,6,true);
lc.setLed(0,4,7,true);
lc.setLed(0,4,6,true);
lc.setLed(0,4,5,true);
lc.setLed(0,4,4,true);
lc.setLed(0,4,3,true);
lc.setLed(0,4,2,true);
lc.setLed(0,4,1,true);
lc.setLed(0,4,0,true);
lc.setLed(0,5,0,true);
lc.setLed(0,6,0,true);
lc.setLed(0,3,0,true);
lc.setLed(0,2,0,true);
}
} else if (winner == 2) {
lc.clearDisplay(0);
while (winner == 2) {
char customKey = customKeypad.getKey();
if (customKey == '0') {
Reset_AVR();
}
// Desenha número 2 na matriz
lc.setLed(0,2,0,true);
lc.setLed(0,3,0,true);
lc.setLed(0,4,0,true);
lc.setLed(0,5,0,true);
lc.setLed(0,2,1,true);
lc.setLed(0,2,2,true);
lc.setLed(0,2,3,true);
lc.setLed(0,2,4,true);
lc.setLed(0,3,4,true);
lc.setLed(0,4,4,true);
lc.setLed(0,5,4,true);
lc.setLed(0,5,5,true);
lc.setLed(0,5,6,true);
lc.setLed(0,5,7,true);
lc.setLed(0,4,7,true);
lc.setLed(0,3,7,true);
lc.setLed(0,2,7,true);
}
}
}
int round_player() {
if (player1) {
player1 = false;
result = 1;
} else {
player1 = true;
result = 2;
}
return result;
}
void win(int player) {
// Verifica linhas
if (plays[0][0]==player && plays[0][1]==player && plays[0][2]==player) winner=player;
else if (plays[1][0]==player && plays[1][1]==player && plays[1][2]==player) winner=player;
else if (plays[2][0]==player && plays[2][1]==player && plays[2][2]==player) winner=player;
// Verifica colunas
else if (plays[0][0]==player && plays[1][0]==player && plays[2][0]==player) winner=player;
else if (plays[0][1]==player && plays[1][1]==player && plays[2][1]==player) winner=player;
else if (plays[0][2]==player && plays[1][2]==player && plays[2][2]==player) winner=player;
// Verifica diagonais
else if (plays[0][0]==player && plays[1][1]==player && plays[2][2]==player) winner=player;
else if (plays[0][2]==player && plays[1][1]==player && plays[2][0]==player) winner=player;
}
void switch_on_led(int col, int row, int colPlays, int rowPlays) {
if (player1) {
lc.setLed(0, col, row, true);
lc.setLed(0, col+1, row-1, true);
} else {
lc.setLed(0, col, row-1, true);
lc.setLed(0, col+1, row, true);
}
plays[rowPlays][colPlays] = round_player();
}
void painting(int bottone) {
switch (bottone) {
case 49: if (!q1) { switch_on_led(0,7,0,0); q1=true; } break;
case 50: if (!q2) { switch_on_led(3,7,0,1); q2=true; } break;
case 51: if (!q3) { switch_on_led(6,7,0,2); q3=true; } break;
case 52: if (!q4) { switch_on_led(0,4,1,0); q4=true; } break;
case 53: if (!q5) { switch_on_led(3,4,1,1); q5=true; } break;
case 54: if (!q6) { switch_on_led(6,4,1,2); q6=true; } break;
case 55: if (!q7) { switch_on_led(0,1,2,0); q7=true; } break;
case 56: if (!q8) { switch_on_led(3,1,2,1); q8=true; } break;
case 57: if (!q9) { switch_on_led(6,1,2,2); q9=true; } break;
case 48: Reset_AVR(); break;
}
}
Esquemático
Arquivo Fritzing disponível: tris_1Nd6QnEjNE.fzz
Processo de manufatura
- Crie um Sistema Ambilight Impressionante para Monitor com Arduino
- Construa o Clássico Jogo Pong no Arduino UNO com Display OLED – Tutorial Passo a Passo
- Construa um Jogo Operação Animatrônico de Minifigura Lego Gigante com Arduino
- Detector de Frequência de Áudio com Arduino – Meça Picos de Som com Módulo de Alta Sensibilidade
- Construa Seu Próprio Tamagotchi com Arduino: Projeto DIY de Pet Digital
- Controlador Inteligente de Interruptor de Luz Sem Fio: Manipulador Remoto Baseado em Arduino
- Pistola de Água Inteligente com Detecção de Movimento usando Arduino Nano
- Construa um Temporizador Regressivo Confiável com Arduino e Display de 7 Segmentos SparkFun
- Eletrodomésticos Ativados por Voz: Controle Bluetooth com Google Assistant
- Girassol Eletrônico com Arduino: Rastreador Solar Autônomo