Diana-Gabriela-Ştefania ION (25533) - Tetris pe LED-uri

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul are ca scop implementarea celebrului joc Tetris folosind ca display mai multe matrice de LED-uri inlantuite.

Tetris este un joc puzzle care consta in asezarea unor forme geometrice compuse din 4 patratele care se deplaseaza in jos pe o matrice astfel incat sa se umple un rand intreg. Atunci cand un rand este umplut, acesta dispare. Formele geometrice pot fi mutate stanga/dreapta sau rotite cu 90 de grade pentru a se potrivi mai bine. Jocul se termina atunci cand nu mai este loc pentru formele geometrice care se deplaseaza.

Pe langa display-ul de LED-uri va exista si un buzzer care va emite un sunet atunci cand se aseaza o piesa, cand se termina jocul etc.

Proiectul este util pentru divertisment, jocul fiind destul de interesant (mai ales cand nu ai ce face =)).

Ideea de la care am pornit a fost sa fac ceva ce voi putea folosi si dupa terminarea proiectului si, de asemenea, mi-am dorit sa fac un proiect in care partea de hardware si cea de software sa fie destul de echilibrate.

Descriere generală

Schema bloc

Componente

  • Placuta PM2016 cu microcontroller-ul ATMEGA324
  • Alimentare 5V
  • 4 butoane pentru intrare
  • Display din matrici de LED-uri inlantuite
  • Buzzer pentru efecte sonore


Miscarile pieselor vor fi controlate prin cele 4 butoane: start/reset, mutare stanga, mutare dreapta, rotire 90 de grade. Starea curenta a jocului va fi afisata pe display, iar la fiecare eveniment important (asezare piesa, sfarsit de joc si altele) buzzerul va emite un sunet corespunzator.

Hardware Design

Lista de piese

Piesa Cod Producator Cantitate Distribuitor
Matrice de leduri 8×8 catod comunLMD23088AUE-101AWENRUN2TME
Fire mama-mamaMIKROE-511MIKROELEKTRONIKA33TME
BuzzerBMT-1203UXBESTAR1TME
Placa prototipPC-01LAMSCI1TME
ButonTACT-24R-FNINIGI4TME
Sir pini4-103321-8TE Connectivity2TME
Rezistente 220 ohm1/4W220RROYAL OHM16TME
Rezistente 470 ohm--4Optimus Digital
Driver tranzistoriULN2804APGToshiba1Conex Electonic

Schema electrica

Software Design

Am folosit editorul Programer's Notepad 2 si am compilat sursele folosind WinAVR.

Deoarece pinii matricii de leduri controleaza cate o linie si o coloana, a trebuit sa sting si sa aprind ledurile foarte repede pentru a putea sa aprind ce leduri vreau si a crea senzatia ca sunt aprinse continuu. Am pastrat starea curenta a jocului intr-o matrice de 16 x 8 pentru a usura desenarea jocului pe matricea de leduri.

Principalele functii implementate

void init();                    /* functie de initializare a porturilor pentru citire/scriere */
void draw_matrix(int[16][8]);   /* functie care aprinde ledurile, in functie de valoarile din matricea data ca parametru 
                                   (1 -led aprins, 0 - led stins) */
void make_sound(int);           /* genereaza un sunet pe buzzer, in functie de frecventa data ca parametru */
void play();                    /* functie in care sunt implementate etapele de succesiune a jocului */
void draw_animation();          /* functie care deseneaza o animatie la inceperea jocului */
void new_piece();               /* functie care genereaza o piesa noua */
void move_down();               /* functie care muta piesa o pozitie in jos */
void move_right();              /* functie care muta piesa o pozitie la dreapta */
void move_left();               /* functie care muta piesa o pozitie la stanga */
int detect_colision();          /* functie care detecteaza coliziunile dintre piesa si celelalte piese din joc */
int detect_colision_at_top();   /* functie care detecteaza coliziunile in partea de sus a matricii */
void remove_row();              /* functie care sterge un rand daca e plin */
void detect_row();              /* functie care detecteaza daca un rand trebuie sters */
int check_rotate();             /* functie care determina daca rotatia e valida */
void rotate();                  /* functie care roteste matricea 90 de grade spre stanga */
void clear_matrix();            /* functie care sterge continutul matricii jocului la reinitializarea acestuia */

Rezultate Obţinute

Concluzii

Proiectul a fost unul interesant si din fericire am reusit sa ma documentez destul de bine inainte sa lipesc piesele, astfel incat sa nu ard nimic si sa pot sa aprind matricile de leduri. Singura dificultate majora a constat in faptul ca au fost foarte multe fire de lipit si a fost si destul de complicat sa le lipesc, deoarece pinii matricii de leduri nu erau intr-o parte linii si intr-o parte coloane, asa cum ma asteptam. La partea de software nu am intampinat nici o dificultate.

Pe viitor as putea sa mai dezvolt proiectul adaugand si alte jocuri.

Download

Jurnal

  • 6 Aprilie - am primit placa de baza;
  • 13 Aprilie - am primit piesele de baza si am lipit o parte din ele;
  • 20 Aprilie - am terminat de lipit piesele de baza, am testat alimentarea placutei si am pus programul de test; am ales tema proiectului;
  • 29 Aprilie - am alcatuit lista de piese necesare pentru proiect si le-am comandat;
  • 11 Mai - am inceput sa lipesc piesele pe placa prototip;
  • 12 Mai - am terminat de lipit si am verificat ca functioneaza;
  • 21 Mai - am scris o parte din codul jocului;
  • 26 Mai - am terminat de scris codul si am rezolvat bug-urile;

Bibliografie/Resurse

Resurse hardware

Resurse software

Codul este gandit in intregime de mine.

pm/prj2016/drugescu/dianai_tetris.txt · Last modified: 2021/04/14 17:07 (external edit)
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