Bomb Defuser é um minigame arcade interativo desenvolvido em C/C++ (bare metal) para o microcontrolador RP2040, nativamente otimizado para a placa de desenvolvimento BitDogLab.
O objetivo do jogo é testar os reflexos e a velocidade do jogador. Assuma o controle via joystick analógico, localize o alvo na matriz de LEDs e desarme a "bomba" usando o botão de ação antes que o contador do Display OLED chegue a zero. O tempo aperta a cada nível superado!
- Gameplay Reativo: 10 níveis de dificuldade crescente.
- Controle Analógico Suave: Joystick via ADC com tratamento de deadzone.
- HUD Informativo: Display OLED via I2C mostrando o estado do nível atual e o cronômetro (milissegundo a milissegundo).
- Gráficos em Matriz: Interação via Matriz de LEDs WS2812B 5x5 processada por PIO e DMA (processamento em background sem sobrecarregar a CPU principal).
- Feedback Sonoro: Efeitos de menu, aviso de tempo acabando, explosões e vitória gerados via alto-falante/buzzer por PWM.
- Engine baseada em Estados: Uso de Interrupção de Hardware (IRQ) com timer debounce para os botões.
O código-fonte foi modularizado para priorizar a legibilidade e as boas práticas de programação:
main.c/CMakeLists.txt: Lógica da máquina de estados do jogo (Game Loop), controle de interrupções (IRQ) e compilação.oled.ceoled.h: Biblioteca construída do zero para a comunicação I2C e renderização no Display OLED SSD1306.ws2812.cews2812.h: Controle da matriz de LEDs usando PIO (Programmable I/O) e DMA (Direct Memory Access).
O código está mapeado para a pinagem padrão da placa didática BitDogLab.
| Componente | GPIO (RP2040) | Protocolo/Interface |
|---|---|---|
| Matriz de LED WS2812B | GPIO 7 |
PIO + DMA (800kHz) |
| Display OLED SSD1306 | GPIO 14 (SDA) / GPIO 15 (SCL) |
I2C (i2c1) |
| Buzzer | GPIO 21 |
PWM |
| Joystick (Eixo X) | GPIO 26 |
ADC0 |
| Joystick (Eixo Y) | GPIO 27 |
ADC1 |
| Botão de Ação (BOMBA) | GPIO 5 (Botão A) |
IRQ (Edge Fall) |
- Raspberry Pi Pico SDK instalado e configurado nas variáveis de ambiente.
- Toolchain ARM GNU (
arm-none-eabi-gcc). - CMake e Ninja.
- (Opcional) VS Code com a extensão oficial do Raspberry Pi Pico.
-
Clonar o Repositório:
git clone https://github.com/Laurowd/Bomb-Defuser.git cd Bomb-Defuser -
Gerar os arquivos de Build (CMake):
mkdir build && cd build cmake -G Ninja ..
-
Compilar:
ninja
-
Upload:
- Mantenha pressionado o botão
BOOTSELda sua placa e conecte-a via cabo USB. - O computador reconhecerá a placa como uma unidade USB (pendrive).
- Copie o arquivo
.uf2recém gerado na pastabuilde cole-o dentro da placa para iniciar o jogo automaticamente.
- Mantenha pressionado o botão
- Tela Inicial: O display mostrará "BOMBA!".
- Iniciar: Pressione o Botão A (GPIO 5) para iniciar o nível 1.
- Buscar & Destruir: A Matriz de LEDs exibirá um ponto azul (você) e um ponto vermelho (o alvo). Mova o joystick analógico para colocar o ponto azul exatamente sobre o alvo.
- Desarmar: Pressione o Botão A rapidamente ao estar em cima do alvo vermelho.
- Cuidado: Se o tempo chegar a
0ou você errar o Botão A fora da bomba, é Game Over! - Vitória: Passe do Nível 10 para completar o jogo.
(Logs ativados via porta USB Serial padrão (115200 baud).
📝 Nota Acadêmica (EmbarcaTech) Os documentos de avaliação metodológica (Objetivos, Requisitos, Diagramas e IA) foram consolidados no arquivo Relatório Técnico em PDF que acompanha a entrega desta atividade.
Este código é open-source e está licenciado sob a licença MIT.