Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:theodor_ioan.buliga:denisa.giuglan [2026/05/11 13:09]
denisa.giuglan
pm:prj2026:theodor_ioan.buliga:denisa.giuglan [2026/05/27 02:53] (current)
denisa.giuglan [Concluzii]
Line 8: Line 8:
  
 <note tip> <note tip>
-  * Proiectul meu aduce jocul Tetris din lumea virtuala intr-un format fizic, construit cu ajutorul unei placi Arduino. Ideea de baza este simpla: piese de diferite forme cad pe un ecran, iar jucatorul trebuie sa le potriveasca perfect pentru a crea linii orizontale. Atunci cand o linie este completa, ea dispare, lasand loc pentru noi piese.+  * Proiectul meu aduce jocul Tetris din lumea virtuala intr-un format fizic, construit cu ajutorul unei placi Arduino. Ideea de baza este simpla: piese de diferite forme cad pe o matrice verticala de LED-uri, iar jucatorul trebuie sa le potriveasca perfect pentru a crea linii orizontale. Atunci cand o linie este completa, ea dispare, lasand loc pentru noi piese.
  
   * Am pornit de la dorinta de a vedea cum pot transforma niste componente electronice obisnuite intr-o consola de jocuri functionala. Mi-am dorit sa vad daca pot sa fac toate aceste piese sa se miste fluid, sa afisez scorul in timp real si sa adaug muzica de fundal, totul dintr-un singur cod.   * Am pornit de la dorinta de a vedea cum pot transforma niste componente electronice obisnuite intr-o consola de jocuri functionala. Mi-am dorit sa vad daca pot sa fac toate aceste piese sa se miste fluid, sa afisez scorul in timp real si sa adaug muzica de fundal, totul dintr-un singur cod.
Line 17: Line 17:
  
 <note tip> <note tip>
-  * **Control (Input):** Jucatorul foloseste un joystick pentru a muta piesele la stanga ​sau la dreapta si un buton separat pentru a le roti. Aceste miscari sunt trimise ca semnale catre placa Arduino.+  * **Control (Input):** Jucatorul foloseste un joystick pentru a muta piesele la stangala dreapta ​sau in jos si un buton separat pentru a le roti. Aceste miscari sunt trimise ca semnale catre placa Arduino.
  
   * **Procesare (Logica):** Placa Arduino Uno este "​creierul"​ care ruleaza jocul. Ea decide cat de repede cad piesele, verifica daca s-a format o linie si calculeaza scorul.   * **Procesare (Logica):** Placa Arduino Uno este "​creierul"​ care ruleaza jocul. Ea decide cat de repede cad piesele, verifica daca s-a format o linie si calculeaza scorul.
Line 25: Line 25:
   * **Sunet (Feedback):​** Un buzzer reda muzica de fundal si scoate sunete scurte atunci cand jucatorul castiga puncte sau pierde jocul.   * **Sunet (Feedback):​** Un buzzer reda muzica de fundal si scoate sunete scurte atunci cand jucatorul castiga puncte sau pierde jocul.
 </​note>​ </​note>​
 +
 +{{ :​pm:​prj2026:​theodor_ioan.buliga:​diagram.drawio.png?​500 | }}
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 40: Line 42:
 </​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:
 +
 +^ Componenta ^ Pin Componenta ^ Pin Arduino ^ Justificare Tehnica ^
 +| **OLED** | VCC | **5V** | Alimentare modul ecran. |
 +| | GND | **GND** | Masa comuna a circuitului. |
 +| | SDA | **A4** | Serial Data pentru I2C. Pin dedicat hardware pe Arduino Uno. |
 +| | SCL | **A5** | Serial Clock pentru I2C. Sincronizeaza transferul de date. |
 +| **Matrice LED** | VCC | **5V** | Alimentare module MAX7219. |
 +| | GND | **GND** | Masa comuna. |
 +| | DIN | **D11** | MOSI (SPI). Transfer rapid de date catre cele 256 de LED-uri. |
 +| | CS / LOAD | **D10** | Chip Select. Activeaza scrierea pe modulele LED. |
 +| | CLK | **D13** | SCK (SPI Clock). Sincronizeaza bitii in protocolul SPI. |
 +| **Joystick** | VCC | **5V** | Alimentare pentru potentiometrele interne. |
 +| | GND | **GND** | Masa comuna. |
 +| | VRX | **A0** | Intrare Analogica. Citeste axa X pentru deplasare stanga/​dreapta. |
 +| | VRY | **A1** | Intrare Analogica. Citeste axa Y pentru cadere rapida. |
 +| | SW | **D4** | Intrare Digitala pentru butonul intern al joystick-ului. |
 +| **Push Button** | P1 | **D2** | Intrare Digitala. Suporta intreruperi hardware (Interrupts). |
 +| | P2 | **5V** | Sursa de semnal pentru logica de tip Active High. |
 +| **Buzzer** | (+) | **D3** | Pin PWM. Genereaza frecventele audio. |
 +| | (-) | **GND** | Masa comuna. |
 ===== 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 StudioCodeVisionAVR) +  * **Wire.h** — Biblioteca nativa din Arduinoutilizata 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 3surse şi funcţii implementate+  * **LedControl.h** — Biblioteca utilizata pentru controlul celor 4 module de matrice LED (MAX7219legate 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 proiectuluisurse, scheme, etcUn 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 jochttps://​youtu.be/​ZB1cEshHryI?si=_HgvfmvWA-34vG1v ​
 </​note>​ </​note>​
- +===== Concluzii ​=====
-===== Jurnal ​=====+
  
 <note tip> <note tip>
-Puteți avea și 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 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>​
  
pm/prj2026/theodor_ioan.buliga/denisa.giuglan.1778494197.txt.gz · Last modified: 2026/05/11 13:09 by denisa.giuglan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0