Minesweeper
Introducere
Proiectul constă în implementarea jocului clasic Minesweeper pe un microcontroller ATmega328P, cu afișare pe un display grafic, navigare prin joystick și feedback audio printr-un buzzer.
Jocul generează aleator o hartă cu mine. Jucătorul poate naviga pe grilă folosind joystick-ul, poate descoperi celule și poate marca mine suspecte cu un flag. Buzzer-ul oferă feedback sonor diferit pentru evenimente precum descoperirea unei celule libere, activarea unei mine sau câștigarea jocului.
Scopul proiectului este crearea unui mediu de joc funcțional și interactiv pe hardware minimal, demonstrând că un microcontroler de 8 biți este suficient pentru a gestiona logica de joc, randare grafică și comunicare cu perifericele — fără sistem de operare sau resurse suplimentare.
Ideea vine din pasiunea pentru jocul clasic Minesweeper și dorința de a-l experimenta într-un mod diferit față de varianta digitală obișnuită — pe un dispozitiv fizic, construit de la zero.
Descriere generală
Arhitectura proiectului este structurată în jurul microcontrolerului ATmega328P, care acționează ca unitate centrală de procesare, integrând periferice de intrare (joystick, butoane) și ieșire (display TFT, buzzer pasiv) prin intermediul protocoalelor și resurselor interne ale microcontrolerului (SPI, ADC, PWM, Timere și Întreruperi).
Schema Bloc
Module Hardware
Microcontrolerul (ATmega328P): Gestionează toate interacțiunile, rulează logica jocului și coordonează sincronizarea modulelor.
Modulul de Ieșire Vizuală (Display TFT 1.8”): Comunică cu microcontrolerul prin interfața hardware SPI, randează grila de joc, cursorul și interfața utilizatorului.
Modulul de Intrare Analogică (Joystick): Conectat la pinii ADC, permite citirea axelor X și Y pentru mișcarea cursorului pe ecran.
Modulul de Intrare Digitală (Butoane SELECT / FLAG): Conectate la pinii PD2 și PD3, care suportă întreruperi externe dedicate, asigurând un timp de răspuns instantaneu la acțiunile jucătorului.
Modulul de Feedback Audio (Buzzer Pasiv): Conectat la un pin PWM, permite generarea de tonuri la frecvențe variate.
Module Software
State Machine: Gestionează starea globală a sistemului (STATE_MENU, STATE_PLAYING, STATE_GAME_OVER, STATE_VICTORY), controlând ce logică se execută la un moment dat.
Game Logic: Generează distribuția aleatoare a minelor (seed obținut din zgomotul ADC pe un pin neconectat), actualizează starea celulelor și execută algoritmul Flood Fill pentru deschiderea automată a zonelor libere.
Input Handler: Gestionează debouncing-ul software prin Timere și interpretează valorile ADC ale joystick-ului, traducându-le în direcții (Sus, Jos, Stânga, Dreapta).
Display Driver: Bibliotecă minimală ce conține comenzile de inițializare ale modulului ST7735 și funcții de desenare a primitivelor geometrice și a textului.
Audio Controller: Modul non-blocant bazat pe Timere. Modifică regiștrii PWM pentru a genera tonul dorit și oprește automat sunetul după durata specificată, fără a utiliza delay-uri blocante care ar întrerupe randarea vizuală.
Hardware Design
Listă de componente:
Placa ATmega328P
Display Grafic TFT Color 1.8”
Joystick analog
Buzzer pasiv
Butoane tactile (x2) (SELECT, FLAG)
Rezistențe (pull-up butoane)
Fire de legătură, breadboard
Sursă 5V