This shows you the differences between two versions of the page.
|
pm:prj2026:theodor_ioan.buliga:denisa.giuglan [2026/05/22 21:32] denisa.giuglan [Descriere generală] |
pm:prj2026:theodor_ioan.buliga:denisa.giuglan [2026/05/27 02:53] (current) denisa.giuglan [Concluzii] |
||
|---|---|---|---|
| Line 41: | Line 41: | ||
| * **Breadboard si fire de legatura:** Pentru realizarea conexiunilor intre componente. | * **Breadboard si fire de legatura:** Pentru realizarea conexiunilor intre componente. | ||
| </note> | </note> | ||
| + | |||
| + | {{ :pm:prj2026:theodor_ioan.buliga:pm.png?500 | }} | ||
| + | |||
| + | !Display-ul de ceas din imaginea atasata mai sus reprezinta matricea de LED-uri, iar potentiometrul reprezinta joystick-ul! | ||
| In tabelul de mai jos este prezentata configuratia pinilor utilizati, alaturi de justificarea tehnica a alegerii acestora: | In tabelul de mai jos este prezentata configuratia pinilor utilizati, alaturi de justificarea tehnica a alegerii acestora: | ||
| Line 65: | Line 69: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | ==== IDE folosit ==== | ||
| + | <note tip> | ||
| + | Am folosit **Arduino IDE** pentru scrierea, compilarea si incarcarea firmware-ului direct pe placa de dezvoltare. | ||
| + | </note> | ||
| + | ==== Biblioteci utilizate ==== | ||
| <note tip> | <note tip> | ||
| - | Descrierea codului aplicaţiei (firmware): | + | Urmatoarele biblioteci 3rd-party si native au fost incluse pentru a asigura controlul perifericelor: |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * **Wire.h** — Biblioteca nativa din Arduino, utilizata pentru gestionarea protocolului de comunicare I2C cu ecranul OLED. |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * **Adafruit_GFX.h** — Biblioteca de baza Adafruit pentru functiile grafice (afisare text, linii si forme geometrice). |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * **Adafruit_SSD1306.h** — Driver software dedicat controlului si maparii pixelilor pe ecranul OLED de 128x64. |
| - | * (etapa 3) surse şi funcţii implementate | + | * **LedControl.h** — Biblioteca utilizata pentru controlul celor 4 module de matrice LED (MAX7219) legate in cascada prin interfata SPI hardware. |
| </note> | </note> | ||
| - | ===== Rezultate Obţinute ===== | + | ==== Structuri si algoritmi implementati ==== |
| <note tip> | <note tip> | ||
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | * **Salvarea starii pe biti (Bit-mapping):** Pentru optimizarea memoriei RAM limitate, tabla de joc este stocata intr-un vector compact de tip ''uint8_t board[32]''. Fiecare bit dintr-un byte reprezinta starea unui pixel (0 = stins, 1 = aprins) de pe latimea de 8 coloane a jocului. |
| + | * **Logica non-blocking (Asincrona):** Functia audio si cea de control al timpului folosesc functia ''millis()'' in loc de ''delay()''. Acest lucru permite rularea concomitenta a melodiei prin buzzer, citirea joystick-ului si caderea automata a pieselor fara blocarea microcontrolerului. | ||
| </note> | </note> | ||
| - | ===== Concluzii ===== | + | ==== Surse si functii implementate ==== |
| - | ===== Download ===== | + | ^ Nume Functie ^ Descriere Functionalitate ^ |
| + | | ''void setup()'' | Initializeaza ecranul OLED si matricele LED, configureaza pinii pentru joystick/buton si porneste meniul principal. | | ||
| + | | ''void loop()'' | Gestioneaza starile jocului, apeleaza functia de muzica, citeste intrarile si controleaza automat caderea pieselor. | | ||
| + | | ''void resetGame()'' | Goleste tabla de joc (reseteaza vectorul de biti la 0), aduce scorul si nivelul la 1 si genereaza prima piesa. | | ||
| + | | ''void drawMenu()'' | Afiseaza ecranul de start pe display-ul OLED, asteptand apasarea butonului pentru a incepe jocul. | | ||
| + | | ''void updateOLED()'' | Actualizeaza in timp real datele despre scor, nivelul curent de dificultate si numarul total de linii sterse pe ecranul OLED. | | ||
| + | | ''void spawnPiece()'' | Alege aleatoriu una dintre cele 7 forme de piese, o plaseaza in partea de sus si verifica conditia de Game Over. | | ||
| + | | ''void handleInput()'' | Citeste axele joystick-ului pentru miscari si verifica starea butonului pentru a roti piesa activa (transpunere matrice 3x3). | | ||
| + | | ''bool canMove(...)'' | Verifica daca o piesa se poate muta sau roti in siguranta fara sa iasa din ecran sau sa loveasca piese deja fixate. | | ||
| + | | ''void lockPiece()'' | Copiaza piesa activa in vectorul permanent al tablei de joc (''board'') prin aplicarea unei masti pe biti. | | ||
| + | | ''void checkLines()'' | Scaneaza tabla pentru a gasi linii complete (byte egal cu 0xFF). Daca gaseste, le sterge, coboara liniile de deasupra si creste scorul. | | ||
| + | | ''void manageMusic()'' | Citeste vectorul cu notele muzicale ale temei Tetris si le reda consecutiv prin buzzer, calculand pauzele in mod asincron. | | ||
| + | | ''void render()'' | Preia buffer-ul tablei de joc, suprapune piesa activa si trimite datele prin SPI catre cele 4 drivere MAX7219. | | ||
| + | ===== Rezultate Obţinute ===== | ||
| - | <note warning> | + | <note tip> |
| - | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | | {{:pm:prj2026:theodor_ioan.buliga:pm1.jpeg?350}} {{:pm:prj2026:theodor_ioan.buliga:pm2.jpeg?350}} | |
| - | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Demo joc: https://youtu.be/ZB1cEshHryI?si=_HgvfmvWA-34vG1v |
| </note> | </note> | ||
| - | + | ===== Concluzii ===== | |
| - | ===== Jurnal ===== | + | |
| <note tip> | <note tip> | ||
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | **Rezultate obtinute:** |
| + | * **Sistem de control precis:** Utilizarea joystick-ului analogic si a unui buton extern ofera o experienta de joc fluida si intuitiva, permitand miscarea rapida si rotirea exacta a pieselor in timp real. | ||
| + | * **Afisare duala eficienta:** Integrarea matricelor LED 8x32 ofera o suprafata de joc clara si luminoasa, in timp ce ecranul secundar OLED afiseaza in mod constant statisticile esentiale (scorul, nivelul si liniile sterse), imbunatatind experienta utilizatorului. | ||
| + | * **Multitasking software (Non-blocking):** Prin eliminarea functiilor de tip ''delay()'' si utilizarea exclusiva a contorizarii timpului via ''millis()'', firmware-ul ruleaza asincron. Consola reuseste sa redea melodia de fundal prin buzzer, sa scaneze intrarile si sa gestioneze caderea pieselor in mod simultan, fara intreruperi. | ||
| + | |||
| + | **Concluzii personale:** | ||
| + | * Proiectul a reprezentat o oportunitate excelenta de a combina cunostintele de electronica digitala cu cele de programare software pe microcontrolere. Cele mai mari provocari au fost optimizarea memoriei RAM (prin maparea tablei de joc direct pe masti de biti) si implementarea algoritmului de transpunere si rotire a matricelor software pentru a se potrivi cu orientarea fizica a hardware-ului MAX7219. | ||
| + | |||
| + | * In final, toate obiectivele propuse in faza de design au fost atinse cu succes, rezultand un dispozitiv hardware stabil si un joc complet functional. | ||
| </note> | </note> | ||
| + | ===== Download ===== | ||
| + | <note warning> | ||
| + | Arhiva contine codul Arduino al proiectului: {{:pm:prj2026:theodor_ioan.buliga:tetris.zip | tetris.zip}} | ||
| + | </note> | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| <note> | <note> | ||
| - | * [[https://www.optimusdigital.ro/ro/]] | + | * [[https://www.optimusdigital.ro/]] |
| + | * [[https://www.tinkercad.com/]] | ||
| </note> | </note> | ||
| <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||