Jogo Pong em uma matriz de leds - arduino jogo #04

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 Resultado de imagem para protoboard 830v

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  Resultado de imagem para potenciômetro 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

×

Infomações do site / SEO








×

Adicionar Marcadores