Início
/
Projetos Arduino
/
Jogos
/
Jogo Pong em uma matriz de leds - arduino jogo #04
Jogo Pong em uma matriz de leds - arduino jogo #04
Angelo Luis Ferreira | 27/02/2020
Acessos: 7.914
Jogo 4 : Jogo Pong - Matriz de leds
Objetivo
Criar um jogo inspirado no game "Pong" lançado pela empresa Atari em 1972. O jogo apresentado neste projeto possui um potenciômetro que controla uma barra horizontal exibida em uma matriz de leds, onde o jogador deverá movê-la para a direita ou para a esquerda, evitando que a bolinha (esfera de um led) saia da área do jogo.
Aplicação
Para fins didáticos e diversão.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
|
No mínimo utilizar protoboard com 830 pontos
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
|
|
Módulo Matriz de led |
Módulo Matriz de LED 8 X 8 modelo MAX7219 |
1 |
|
Cor emissão do led: vermelha
Circuito Integrado: MAX7219
Tensão de operação: 5V
Qde. de leds: 64 (8X8)
Utilizar cabos macho-femea para conexão
Matriz: modelo 1088AS com organização interna Linhas (catodo comum) | Colunas (anodo comum)
(datasheet)
Poderá ser utilizado qualquer modelo de matriz 8 X 8
|
Potenciômetro |
Potenciômetro 1K
|
1 |
|
O valor do potenciômetro aumenta quando giramos o eixo do componente na direção do polo negativo para o polo positivo. |
Arduino UNO |
Arduino UNO R3 |
1 |
|
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.
Atenção
1. Para a montagem do módulo matriz de leds 8 X 8 basta conectar o módulo com os pinos do Arduino, conforme tabela abaixo:.
Ardunino |
Módulo |
VCC |
VCC |
GND |
GND |
Pino 12 |
DIN |
Pino 11
|
CLK |
Pino 10
|
CS
|
2. Observe que nesse projeto o potenciômetro foi montado como um divisor de tensão, onde utilizamos os 3 terminais do componente:
Desta forma o potenciômetro funciona como um divisor de tensão que pode ser lido pelo IDE do Arduino. Girando o eixo do polo negativo (GND) para o polo positivo (Vcc) aumentamos o valor, e ao contrário, diminuímos o valor da tensão enviado para a porta analógica do Arduino.
3. Veja abaixo como ficou a montagem do nosso projeto:
Incluindo biblioteca LedControlMS.h no IDE do Arduino
Para obtermos o máximo de funcionalidade do módulo MAX7219 podemos adicionar a biblioteca LedControlMS.h no IDE do Arduino. Com ela podemos acender e apagar leds específicos, criar caracteres, números e até frases de forma muito simples.
Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação. Veja as tabelas Coletânea de bibliotecas para sensores e Coletânea de bibliotecas para módulos.
Download dos arquivos da biblioteca LedControlMS
DOWNLOAD - Arduino_Led_matrix.zip
Para saber detalhes desta biblioteca clique aqui.
Instalando a biblioteca pelo IDE do Arduino
Após fazer o download do arquivo Arduino_Led_matrix.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.
Como usar o módulo matriz de leds MAX7219
Se você deseja conhecer melhor como utilizar o módulo matriz de leds MAX 7219, veja os projetos:
Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino
Projeto 74 - Exibindo textos em um módulo matriz de leds MAX7219 com Arduino - otimização
Para entender melhor como usar o potenciômetro e a função map(), leia: map() - Referência Arduino e o Projeto 16 - Sequência de LEDs controlados por potenciômetro.
Código do projeto (sketch)
1) Faça o dowload e abra o arquivo jogo3.ino no IDE do Arduino: DOWNLOAD - jogo3.ino
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* Jogo 4 - Jogo Pong - Matriz de Leds
* Criado por: www.wrkits.com.br | facebook.com/wrkits
* Adaptado por Angelo Luis Ferreira
* http://squids.com.br/arduino
*
*******************************************************************************/
#include // controle do módulo matriz MAX7219
/* =============================================================================================================
Hardware
DIN -> Arduino Digital 12
CS -> Arduino Digital 10
CLK -> Arduino Digital 11
============================================================================================================= */
LedControl lc = LedControl(12, 11, 10, 1); // cria o objeto lc e define as conexões para 1 módulo
int column = 1, row = random(8)+1; // define aleatóriamente em que ponto a bola deve começar
int directionX = 1, directionY = 1; //define que vai primeiro da esquerda para a direita
const byte pinPot = 5; // pino potenciômetro
int pinPotVal; // valor do potenciômetro
int velocidade = 300; // valor inicial para a velocidade
byte counter = 0; // contador
const byte mult = 10; // multipolicador
byte sad[] = {
B00111100,
B01000010,
B10100101,
B10000001,
B10011001,
B10100101,
B01000010,
B00111100
};
byte smile[] = {
B00111100,
B01000010,
B10100101,
B10000001,
B10100101,
B10011001,
B01000010,
B00111100
};
void setup(){
lc.shutdown(0, false); //habilita o display
lc.setIntensity(0, 8); //define o brilho como médio
lc.clearDisplay(0); //limpa o display
randomSeed(analogRead(0)); //criar séries genuinamente aleatórias
newGame();
} // end setup
void loop() {
pinPotVal = analogRead(pinPot);
pinPotVal = map(pinPotVal, 200, 1024, 1, 6);
column += directionX;
row += directionY;
if(column == 6 && directionX == 1 && (pinPotVal == row || pinPotVal+1 == row || pinPotVal+2 == row)) directionX = -1;
if(column == 0 && directionX == -1) directionX = 1;
if(row == 7 && directionY == 1 ) directionY = -1;
if(row == 0 && directionY == -1) directionY = 1;
if(column == 7) gameOver();
lc.clearDisplay(0); //limpa tela para próxima quadro de animação
lc.setLed(0, column, row, HIGH);
lc.setLed(0, 7, pinPotVal, HIGH);
lc.setLed(0, 7, pinPotVal+1, HIGH);
lc.setLed(0, 7, pinPotVal+2, HIGH);
if(!(counter % mult)) {velocidade -= 5; mult*mult;}
delay(velocidade);
counter++;
} //end loop
void gameOver() {
setSprite(sad); // exibe carinha triste
delay(1500);
lc.clearDisplay(0);
newGame();
}
void newGame() {
for(byte x=0; x<3; x++){
lc.clearDisplay(0);
delay(250);
for(int y=0; y<8; y++){
lc.setRow(0, y, 255);
}
delay(250);
} //end for
setSprite(smile); // exibe carinha com riso
delay(1500);
lc.clearDisplay(0);
counter = 0; //reinicia todos os valores
velocidade = 300;
column = 1;
row = random(8)+1;
} //end newGame
void setSprite(byte sprite[]){
for(byte r = 0; r < 8; r++){
lc.setRow(0, r, sprite[r]);
}
} // end setSprite
Vídeo
Como o projeto deve funcionar
1. Ao executar o programa, é exibido um sinal na matriz de leds e imediatamente após, o desenho da "carinha com sorriso" que indica o início do jogo.
2. Girando-se o eixo do potenciômetro para a direita ou para a esquerda, o jogador deverá evitar que a "bolinha" passe pela barra horizontal.
3. Ao perder, é exibido a "carinha triste" e se inicia um novo jogo.
Créditos
Este projeto foi uma adaptação do projeto original: https://www.youtube.com/watch?v=K4u4KUi_3pU
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários