Skip to content

Laurowd/Bomb-Defuser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

💣 Bomb Defuser

Plataforma Linguagem Licença

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!

🕹️ Funcionalidades

  • 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.

� Estrutura do Projeto

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.c e oled.h: Biblioteca construída do zero para a comunicação I2C e renderização no Display OLED SSD1306.
  • ws2812.c e ws2812.h: Controle da matriz de LEDs usando PIO (Programmable I/O) e DMA (Direct Memory Access).

�🔌 Requisitos de Hardware (Pinout)

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)

🛠️ Dependências de Software

  • 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.

🚀 Como Compilar e Enviar (Deploy)

  1. Clonar o Repositório:

    git clone https://github.com/Laurowd/Bomb-Defuser.git
    cd Bomb-Defuser
  2. Gerar os arquivos de Build (CMake):

    mkdir build && cd build
    cmake -G Ninja ..
  3. Compilar:

    ninja
  4. Upload:

    • Mantenha pressionado o botão BOOTSEL da sua placa e conecte-a via cabo USB.
    • O computador reconhecerá a placa como uma unidade USB (pendrive).
    • Copie o arquivo .uf2 recém gerado na pasta build e cole-o dentro da placa para iniciar o jogo automaticamente.

🎮 Como Jogar

  1. Tela Inicial: O display mostrará "BOMBA!".
  2. Iniciar: Pressione o Botão A (GPIO 5) para iniciar o nível 1.
  3. 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.
  4. Desarmar: Pressione o Botão A rapidamente ao estar em cima do alvo vermelho.
  5. Cuidado: Se o tempo chegar a 0 ou você errar o Botão A fora da bomba, é Game Over!
  6. 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.

📄 Licença

Este código é open-source e está licenciado sob a licença MIT.

About

Minigame bare-metal para RP2040/BitDogLab com C, PIO, DMA, OLED, joystick e matriz de LEDs.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors