This is an old revision of the document!
Autor: Popa Ștefan-Andrei
Scopul acestui proiect este de a reda jocul clasic Tetris prin intermediul unei matrici de LED-uri NeoPixel folosind biblioteca cunoscută Fastled. Pe lângă LED-uri, proiectul va încorpora și diferite componente periferice menite să îmbunătățească experiența de joc, cum ar fi: buzzer audio, ecran LCD, butoane.
Matricea de LED-uri va funcționa ca un ecran low-pixel pentru jocul nostru, fiecare LED putând fi controlat individual la orice moment de timp. Interacțiunea I/O cu jocul se va desfășura exclusiv prin intermediul mai multor butoane prin care jucătorul poate să pornească jocul, să rotească Tetrominoes-urile pe ecran, să restarteze jocul sau să închidă sesiunea. Prin intermediul unui ecran LCD, jucatorul va putea naviga prin meniu sau va putea vizualiza scorul în timp real. Unul sau mai multe buzzere audio vor cânta în permanență sountrack-ul Tetris
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.
Descrierea codului aplicatiei:
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 :
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.
Link demo: demo
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.
Resurse: stefan_andrei_popa_333cc_resurse.zip