Como Criar um Jogo Tetris com Arduino e Display OLED

O Tetris é um dos jogos mais icônicos da história dos videogames. Que tal criar sua própria versão usando um Arduino e um display OLED? Este projeto permite que você desenvolva uma interface gráfica interativa e controle as peças do jogo com botões, proporcionando uma experiência divertida e educativa ao trabalhar com eletrônica e programação embarcada.
Se você é um entusiasta da eletrônica ou está começando no mundo dos microcontroladores, este projeto é ideal para aprimorar seus conhecimentos em hardware e software. Vamos ao passo a passo!
Materiais Necessários
-
Arduino UNO
-
Protoboard
-
Display OLED 128x64 (I2C)
-
Resistor de 330 Ohm (4 unidades)
-
Pushbutton (4 unidades)
-
Jumpers macho-macho (14 unidades)
Sobre o Display OLED 128x64
O display OLED 128x64 é uma tela gráfica compacta e eficiente, amplamente usada em projetos embarcados. Com tecnologia OLED, ele emite luz própria em cada pixel, garantindo alto contraste e baixo consumo de energia. Ele pode se comunicar com microcontroladores via I2C ou SPI, sendo compatível com Arduino e ESP32. Sua alta legibilidade e baixo consumo fazem dele a escolha ideal para jogos simples, interfaces gráficas e dispositivos portáteis.
Esquema de Ligação
A conexão entre os componentes segue a seguinte configuração:
Conexões do Display OLED
Pino do Display | Conexão no Arduino |
---|---|
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
Conexões dos Botões
Cada botão é conectado a um pino do Arduino e ao GND através de um resistor de 330 Ohm:
Botão | Pino do Arduino |
Esquerda | D2 |
Direita | D3 |
Girar Peça | D4 |
Acelerar Queda | D5 |
Implementação do Código
O código é escrito em C++ e utiliza as bibliotecas da Adafruit para controle do display OLED. Aqui estão algumas partes essenciais:
Inicialização do Display OLED
#include
#include
#include
#define largura 64
#define altura 128
Adafruit_SSD1306 display(altura, largura, &Wire, -1);
Aqui, importamos as bibliotecas necessárias e criamos um objeto para o display OLED.
Configuração dos Botões e Inicialização do Jogo
#define esquerda 2
#define direita 3
#define rotacao 4
#define tempo 5
void setup() {
Serial.begin(9600);
pinMode(esquerda, INPUT_PULLUP);
pinMode(direita, INPUT_PULLUP);
pinMode(rotacao, INPUT_PULLUP);
pinMode(tempo, INPUT_PULLUP);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Falha ao inicializar o SSD1306"));
for (;;);
}
display.setRotation(1);
display.clearDisplay();
delay(2000);
display.clearDisplay();
}
Aqui, definimos os pinos dos botões e inicializamos o display OLED.
Movimento das Peças
void loop() {
if (!digitalRead(esquerda)) {
// Move a peça para a esquerda
}
if (!digitalRead(direita)) {
// Move a peça para a direita
}
if (!digitalRead(rotacao)) {
// Rotaciona a peça
}
if (!digitalRead(tempo)) {
// Acelera a queda da peça
}
}
Essa lógica permite que o jogador controle as peças do Tetris.
Funcionamento do Circuito
O jogo funciona com base em uma matriz 10x18 representando a área de jogo. As peças se movem conforme os comandos recebidos pelos botões. Quando uma linha é completada, ela é eliminada e as linhas acima descem, seguindo a mecânica clássica do Tetris.
Para otimizar o desempenho, utilizamos variáveis booleanas para verificar colisões e atualizar a posição das peças de forma eficiente.
Melhorias e Possibilidades
Este projeto pode ser expandido com algumas melhorias:
-
Aprimoramento do código: otimização da lógica de colisão e movimentação.
-
Uso de um buzzer: adicionar sons para tornar o jogo mais imersivo.
-
Salvar pontuações: implementar armazenamento de recordes em EEPROM.
-
Adicionar níveis de dificuldade: acelerar as peças conforme o jogo avança.
Conclusão
Criar um jogo Tetris com Arduino é um excelente projeto para quem deseja aprender mais sobre eletrônica e programação embarcada. Além de ser um desafio técnico, o resultado final é um jogo clássico e divertido.
Se você gostou deste tutorial, compartilhe com outros entusiastas da eletrônica e deixe um comentário contando sua experiência! Caso tenha feito alguma modificação ou melhoria, compartilhe suas ideias nos comentários!