Que tal um mini fliperama? Neste projeto você monta o clássico jogo Pong numa matriz de LED 8x8: a bolinha quica pelas bordas e você controla a raquete com um joystick para rebater. Se deixar a bola passar, o jogo reinicia. Diversão retrô pura, feita com Arduino.

A matriz de LED 8x8 é uma telinha de 64 LEDs organizados em 8 linhas e 8 colunas. Controlar 64 LEDs individualmente exigiria muitos pinos, mas o chip MAX7219 resolve isso: ele comanda toda a matriz usando apenas 3 pinos do Arduino, e a biblioteca faz o trabalho pesado de acender os pontos certos. Neste jogo, um ponto aceso é a bolinha, e uma coluna de pontos acesos na lateral é a sua raquete. O joystick, lido pela porta analógica, move a raquete para cima e para baixo. A cada quadro, o programa recalcula a posição da bola, verifica se ela bateu numa parede (e inverte a direção) ou se você a rebateu com a raquete. Se a bola passar pela sua raquete, você perde e o jogo recomeça.
Todos os componentes disponíveis na A2 Robotics — clique em cada item para comprar
Arduino Uno R3
1 unidade
Matriz de LED 8x8 com MAX7219
1 unidade
Módulo joystick KY-023
1 unidade
Protoboard
1 unidade
Jumpers (cabos de ligação)
1 kit
Este projeto usa a biblioteca LedControl, que controla a matriz pelo chip MAX7219. Na IDE do Arduino, vá em Ferramentas → Gerenciar Bibliotecas, procure por "LedControl" (de Eberhard Fahle) e instale. Sem ela o código não compila.
O código desenha a raquete na coluna da direita (controlada pelo joystick) e a bolinha quicando pela tela. A cada quadro, ele move a bola, verifica colisões com as paredes e com a raquete, e reinicia se você deixar a bola escapar. Ajuste a velocidade mudando o valor do delay no final.
// Jogo Pong na matriz 8x8 (MAX7219) — A2 Robotics #include <LedControl.h> // LedControl(DIN, CLK, CS, quantidade de matrizes) LedControl matriz = LedControl(11, 13, 10, 1); #define JOY_Y A1 // eixo vertical do joystick // Posição da bola e direção int bolaX = 3, bolaY = 3; int dirX = 1, dirY = 1; // Posição da raquete (topo dela) int raquete = 3; void setup() { matriz.shutdown(0, false); // liga a matriz matriz.setIntensity(0, 8); // brilho (0 a 15) matriz.clearDisplay(0); } void loop() { matriz.clearDisplay(0); // Move a raquete conforme o joystick (coluna 7) int leitura = analogRead(JOY_Y); raquete = map(leitura, 0, 1023, 0, 5); desenharRaquete(); // Move a bola bolaX += dirX; bolaY += dirY; // Quica nas paredes de cima e de baixo if (bolaY <= 0 || bolaY >= 7) dirY = -dirY; // Quica na parede da esquerda if (bolaX <= 0) dirX = -dirX; // Chegou na coluna da raquete (coluna 6)? if (bolaX >= 6) { if (bolaY >= raquete && bolaY <= raquete + 2) { dirX = -dirX; // rebateu! } else if (bolaX >= 7) { perdeu(); // deixou passar } } matriz.setLed(0, bolaY, bolaX, true); // desenha a bola delay(220); // velocidade do jogo } // Desenha a raquete (3 LEDs) na coluna 7 void desenharRaquete() { for (int i = 0; i < 3; i++) { matriz.setLed(0, raquete + i, 7, true); } } // Animação de fim de jogo e reinício void perdeu() { for (int b = 0; b < 3; b++) { for (int l = 0; l < 8; l++) for (int c = 0; c < 8; c++) matriz.setLed(0, l, c, true); delay(150); matriz.clearDisplay(0); delay(150); } // reinicia a bola no centro bolaX = 3; bolaY = 3; dirX = 1; dirY = 1; }
DIN no D11, CS no D10, CLK no D13. VCC no 5V e GND no GND.
O eixo vertical (VRy) no A1, além de VCC no 5V e GND no GND. Neste jogo usamos só o eixo vertical para mover a raquete.
Pelo Gerenciador de Bibliotecas da IDE do Arduino.
Carregue o código. A bolinha vai começar a quicar — mova o joystick para cima e para baixo para rebater com a raquete. Se errar, a tela pisca e o jogo recomeça.
Mude o valor do delay(220) no código: menor deixa o jogo mais rápido e difícil, maior deixa mais lento e fácil.
Com o Pong funcionando, você pode incrementar: adicionar um placar (mostrando quantas vezes rebateu), aumentar a velocidade da bola conforme o jogo avança, ou usar o botão do joystick para pausar. A matriz de LED também serve para muitos outros projetos: relógios, letreiros rolantes com texto, animações e até outros jogos como a "cobrinha" (Snake). É um componente que rende muita criatividade.