This shows you the differences between two versions of the page.
pm:prj2021:avaduva:tetrismatrix [2021/06/01 02:14] stefan_andrei.popa |
pm:prj2021:avaduva:tetrismatrix [2021/06/01 02:29] (current) stefan_andrei.popa |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Tetris Matrix ====== | ====== Tetris Matrix ====== | ||
- | Autor: [[mailto: stefan_andrei.popa@stud.acs.upb.ro | Popa Ștefan-Andrei]] | + | Autor: [[mailto: stefan_andrei.popa@stud.acs.upb.ro | Popa Ștefan-Andrei 333CC]] |
===== Introducere ===== | ===== Introducere ===== | ||
Line 22: | Line 22: | ||
* Buzzer audio | * Buzzer audio | ||
* Materiale auxiliare pentru realizarea matricii (carton, sticlă acrilică etc.) | * Materiale auxiliare pentru realizarea matricii (carton, sticlă acrilică etc.) | ||
+ | |||
+ | ==== Schema bloc==== | ||
+ | |||
+ | {{pm:prj2021:avaduva:schema-tetris-matrixz.png}} | ||
==== Schema electrica==== | ==== Schema electrica==== | ||
Line 27: | Line 31: | ||
{{pm:prj2021:avaduva:schema_electrica_tetrismatrix.png?750}} | {{pm:prj2021:avaduva:schema_electrica_tetrismatrix.png?750}} | ||
- | LED-urile se folosesc de 3 canale: **VCC** (5V), **GND** si un canal de Data **(D0)**. Pentru coordonarea LED-urilor, ma folosesc de pinul **D7**, avand legata o rezistenta de **330 ohmi**. Pentru a adresa secvential LED-urilor, acestea sunt legate in serie. Intre **VCC** si **GND** am legat un condensator de **1000uF**. Speaker-ul este legat la **D13** si la **GND**. Pentru a controla miscarile obiectelor, am conectate 3 butoane: butonul de //LEFT-DOWN// conectat la **D2**, butonul de //DOWN// conectat la **D8** si butonul de //RIGHT-DOWN// conectat la **D12**. Butoanele sunt legate fiecare la o rezistenta de **330 ohmi** fiecare. | + | LED-urile se folosesc de 3 canale: **VCC** (5V), **GND** și un canal de Data **(D0)**. Pentru coordonarea LED-urilor, mă folosesc de pinul **D7**, având legată o rezistență de **330 ohmi**. Pentru a adresa secvențial LED-urilor, acestea sunt legate în serie. Între **VCC** și **GND** am legat un condensator de **1000uF**. Speaker-ul este legat la **D13** și la **GND**. Pentru a controla mișcările obiectelor, am conectat 3 butoane: butonul de //LEFT-DOWN// conectat la **D2**, butonul de //DOWN// conectat la **D8** și butonul de //RIGHT-DOWN// conectat la **D12**. Butoanele sunt legate fiecare la o rezistență de **330 ohmi** fiecare. |
===== Software Design ===== | ===== Software Design ===== | ||
- | Descrierea codului aplicatiei: | + | Descrierea codului aplicației: |
- | Codul se foloseste de bilbioteca **FastLED.h** pentru a comunica cu matricea de leduri. Pentru a spatializa functiile jocului, am realizat mai multe fisiere de tip header pe care le-am reunit in fisierul **tetris-fastled.ino** : | + | Codul se folosește de biblioteca **FastLED.h** pentru a comunica cu matricea de leduri. Pentru a spațializa funcțiile jocului, am realizat mai multe fișiere de tip header pe care le-am reunit în fișierul **tetris-fastled.ino** : |
- | * **Tetris.h** - contine toate functiile logice ale jocului | + | * **Tetris.h** - conține toate funcțiile logice ale jocului |
- | * **Paint.h** - contine toate functiile care se ocupa cu colorarea LED-urilor | + | * **Paint.h** - conține toate funcțiile care se ocupă cu colorarea LED-urilor |
- | * **Music.h** - contine toate functiile si notele muzicale pentru coloana sonora | + | * **Music.h** - conține toate funcțiile și notele muzicale pentru coloana sonoră |
- | * **Constants.h** - contine toate constantele jocului (ex. inaltimea si lungimea matricii de joc) | + | * **Constants.h** - conține toate constantele jocului (ex. înălțimea și lungimea matricii de joc) |
- | Jocul incepe initial cu o tabla libera. Programul alege la intamplare o culoare si un tetromino pe care il instantiaza pe tabla. In prezent, tetrominourile nu pot fi rotite, ci doar deplasate pe tabla. Prin butoanele fizice, jucatorul poate sa miste tetrominoul in jos, dreapta-jos sau stanga-jos. Programul se asigura printr-un sistem de coliziuni ca obiectele sa nu iasa din scena sau sa se suprapuna. Odata ce un tetromino nu mai poate sa se deplaseze in jos, se valideaza acest lucru si un nou obiect este instantiat in scena. De fiecare data cand un tetromino se opreste, programul se asigura daca exista linii complete, iar in acel caz, le sterge pentru a face loc in scena. Programul se foloseste de o matrice de tip **char** pentru a coordona jocul, iar la finalul fiecarui frame, matricea este proiectata pe ecranul de LED-uri. | + | Jocul începe inițial cu o tablă liberă. Programul alege la întamplare o culoare și un tetromino pe care îl instanțiaza pe tablă. În prezent, tetrominourile nu pot fi rotite, ci doar deplasate pe tablă. Prin butoanele fizice, jucătorul poate să miște tetrominoul în jos, dreapta-jos sau stânga-jos. Programul se asigură printr-un sistem de coliziuni ca obiectele să nu iasă din scenă sau să se suprapună. Odată ce un tetromino nu mai poate să se deplaseze în jos, se valideaza acest lucru și un nou obiect este instanțiat în scenă. De fiecare dată când un tetromino se oprește, programul se asigură dacă există linii complete, iar în acel caz, le șterge pentru a face loc în scenă. Programul se folosește de o matrice de tip **char** pentru a coordona jocul, iar la finalul fiecărui frame, matricea este proiectată pe ecranul de LED-uri. |
Link cod: [[https://github.com/AndreiPopa21/tetris-matrix | https://github.com/AndreiPopa21/tetris-matrix ]] | Link cod: [[https://github.com/AndreiPopa21/tetris-matrix | https://github.com/AndreiPopa21/tetris-matrix ]] | ||
- | ===== Rezultate si concluzii ===== | + | ===== Rezultate și concluzii ===== |
Link demo: [[https://drive.google.com/file/d/15GRXf-JM5zMjwYnpMa8NyB-IQpWfngeq/view?usp=sharing | demo]] | Link demo: [[https://drive.google.com/file/d/15GRXf-JM5zMjwYnpMa8NyB-IQpWfngeq/view?usp=sharing | demo]] | ||
Line 50: | Line 54: | ||
{{pm:prj2021:avaduva:tetris-matrix-2.jpeg?600}} | {{pm:prj2021:avaduva:tetris-matrix-2.jpeg?600}} | ||
- | In realizarea acestui proiect, principala provocarea a fost sudarea firelor in realizarea matricii de LED-uri. Fara o experienta anterioara, m-am confruntat adeseori cu multe lipituri "reci" sau cu componente arse, lucru care a ingreunat mult procesul de dezvoltare. Vizibil in poza este ca nu toate liniile de LED-uri participa, multe dintre acestea fiind afectate in procesul de sudare. Ca software, jocul nu este implementat 100%, dar prezinta principalele caracteristici si mecanici ale jocului original. Desii sunt 6 linii de LED-uri active, acestea pot fi oricand extinse ca numar, iar software-ul prezinta aceasta flexibilitate. | + | În realizarea acestui proiect, principala provocarea a fost sudarea firelor în realizarea matricii de LED-uri. Fără o experiență anterioara, m-am confruntat adeseori cu multe lipituri "reci" sau cu componente arse, lucru care a îngreunat mult procesul de dezvoltare. Vizibil în poză este că nu toate liniile de LED-uri participă, multe dintre acestea fiind afectate în procesul de sudare. Ca software, jocul nu este implementat 100%, dar prezintă principalele caracteristici și mecanici ale jocului original. Deși sunt 6 linii de LED-uri active, acestea pot fi oricând extinse ca număr, iar software-ul prezintă această flexibilitate. |
Resurse: {{pm:prj2021:avaduva:stefan_andrei_popa_333cc_resurse.zip}} | Resurse: {{pm:prj2021:avaduva:stefan_andrei_popa_333cc_resurse.zip}} |