This shows you the differences between two versions of the page.
pm:prj2023:adarmaz:tetris-game [2023/05/28 22:32] rares_gabriel.turcu [Rezultate Obţinute] |
pm:prj2023:adarmaz:tetris-game [2023/05/28 23:25] (current) rares_gabriel.turcu [Jurnal] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Consola Portabila Tetris - Turcu Rares-Gabriel 332AA ====== | + | ====== Consolă portabilă Tetris - Turcu Rareș-Gabriel 332AA ====== |
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul consta in realizarea unui joc de tetris clasic, folosind doua display-uri LCD monocromatice Nokia 5510, cu rezoluția de 48×84 de pixeli. Pe unul se va afisa derularea jocului si pe celalalt scorul, piesa urmatoare si piesa salvata. | + | Proiectul constă în realizarea unui joc de tetris clasic, folosind două display-uri LCD monocromatice Nokia 5510, cu rezoluția de 48×84 pixeli. Pe unul se va afișa derularea jocului și pe celălalt scorul, piesa urmatoare și piesa salvată. |
- | Scopul jocului este obtinerea unor randuri fara spatii prin aranjarea unor piese ce pot fi mutate stanga-dreapta sau rotite. Linia orizontala dispare de pe ecran cand se completeaza toate spatiile goale, marindu-se spatiul de joc, astfel incat jucatorul sa poata acumula mai multe puncte. Ca si imbunatatire a jocului s-a adaugat functionalitatea salvarii piesei curente, ce poate fi folosita prin schimbarea sa cu o alta piesa din joc. | + | Scopul jocului este obținerea unor rânduri fără spații prin aranjarea unor piese ce pot fi mutate stânga-dreapta sau rotite. Linia orizontală dispare de pe ecran când se completează toate spațiile goale, mărindu-se spațiul de joc, astfel încât jucătorul să poată acumula mai multe puncte. Ca și îmbunătățire a jocului s-a adaugat funcționalitatea salvării piesei curente, ce poate fi folosită prin schimbarea sa cu o altă piesă din joc. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Schema bloc: | + | Schemă bloc: |
{{ :pm:prj2023:adarmaz:pm.png?600 |}} | {{ :pm:prj2023:adarmaz:pm.png?600 |}} | ||
- | Cele 2 display-uri se conecteaza la placuta Arduino prin SPI. Joystick-ul functioneaza prin intreruperi analogice, in timp ce butoanele sunt implementate prin intreruperi digitale. | + | Cele 2 display-uri se conectează la placuța Arduino prin SPI. Joystick-ul funcționează prin întreruperi analogice, în timp ce butoanele sunt implementate prin întreruperi digitale. |
Line 18: | Line 18: | ||
Componentele folosite pentru proiect sunt: | Componentele folosite pentru proiect sunt: | ||
- | * placa de dezvoltare compatibila Arduino UNO | + | * placa de dezvoltare compatibilă Arduino UNO |
- | * doua display-uri LCD monocromatice Nokia 5510 | + | * două display-uri LCD monocromatice Nokia 5510 |
* PS2 joystick | * PS2 joystick | ||
* trei butoane | * trei butoane | ||
Line 25: | Line 25: | ||
* breadboard | * breadboard | ||
- | Configuratia componentelor la Arduino | + | Configurația componentelor la Arduino |
^ LCD 1 / 2 ^ Pin ^ | ^ LCD 1 / 2 ^ Pin ^ | ||
Line 46: | Line 46: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | Pentru dezvoltarea aplicatiei am folosit Arduino IDE impreuna cu bibliotecile: | + | Pentru dezvoltarea aplicației am folosit Arduino IDE împreună cu bibliotecile: |
* stdio.h | * stdio.h | ||
* stdlib.h | * stdlib.h | ||
Line 52: | Line 52: | ||
* Adafruit_PCD8544.h | * Adafruit_PCD8544.h | ||
- | Codul implementeaza jocul Tetris pe o placă Arduino, utilizând un display grafic LCD de tip Nokia 5110, un joystick și butoane. Pentru inceput am definit cateva constante si variabile globale pentru configurarea si starea jocului. Tabla de joc este construita dintr-o matrice de dimensiunile 9 pe 15. Pentru ca jocul sa functioneze corect, am avut nevoie sa implementez metode de configurarea și gestionarea butoanelor, desenarea blocurilor pe display, verificarea și eliminarea liniilor complete, și afișarea scorului și a blocurilor următoare. In functia setup se configureaza butoanele cu intrerupere digitala, display-urile LCD afisandu-se pe unul dintre ele titlul jocului. | + | Codul implementează jocul Tetris pe o placă Arduino, utilizând un display grafic LCD de tip Nokia 5110, un joystick și butoane. Pentru început am definit câteva constante și variabile globale pentru configurarea și starea jocului. Tabla de joc este construită dintr-o matrice de dimensiunile 9 pe 15. Pentru ca jocul să funcționeze corect, am avut nevoie să implementez: metode de configurare și gestionare a butoanelor, desenarea blocurilor pe display, verificarea și eliminarea liniilor complete, afișarea scorului și a blocurilor următoare. În funcția setup se configurează butoanele cu întrerupere digitală. Display-urile LCD afisează pe unul dintre ele titlul jocul și pe celălalt scorul. |
- | Functia loop controleaza miscarea si rotatia pieselor, prin starea butoanelor si a joystick-ului. În interiorul functiei, se desfășoară logica jocului. Mai întâi, se verifică dacă trebuie să se schimbe blocul curent sau să se blocheze blocul curent pe tablă. Aceasta se realizează prin intermediul variabilelor switchBlock și lock. Dacă trebuie să se schimbe blocul curent, se efectuează schimbul între blocul curent și blocul următor sau blocul curent și blocul ținut (holdBlock). Se verifică, de asemenea, dacă s-a ajuns la sfârșitul listei de blocuri și se resetează blocul următor la primul bloc. Dacă trebuie să se blocheze blocul curent pe tablă, se efectuează verificări pentru eliminarea liniilor complete de pe tablă și se actualizează scorul. Blocul curent se desenează pe tablă, iar jucătorul poate controla blocul curent prin intermediul butoanelor sau prin intermediul valorilor citite de la senzorii analozi. | + | Funcția loop controlează miscarea și rotația pieselor, prin starea butoanelor și a joystick-ului. În interiorul funcției, se desfășoară logica jocului. Mai întâi, se verifică dacă trebuie să se schimbe blocul curent sau să se blocheze blocul curent pe tablă. Aceasta se realizează prin intermediul variabilelor switchBlock și lock. Dacă trebuie să se schimbe blocul curent, se efectuează schimbul între blocul curent și blocul următor sau blocul curent și blocul ținut (holdBlock). Se verifică, de asemenea, dacă s-a ajuns la sfârșitul listei de blocuri și se resetează blocul următor la primul bloc. Dacă trebuie să se blocheze blocul curent pe tablă, se efectuează verificări pentru eliminarea liniilor complete de pe tablă și se actualizează scorul. Blocul curent se desenează pe tablă, iar jucătorul poate controla blocul curent prin intermediul butoanelor sau prin intermediul valorilor citite de la senzorii analogici. |
- | În cadrul buclei interne, se verifică starea butoanelor (buttonState1, buttonState2, buttonState3) și valorile senzorilor analozi (xValue și yValue). În funcție de acestea, se efectuează mișcări ale blocului curent pe tablă, cum ar fi mișcări în stânga, mișcări în dreapta, mișcări în jos sau rotații. Dacă butonul 3 (buttonState3) este apăsat și blocul curent nu este blocat, se efectuează schimbul între blocul curent și blocul ținut (holdBlock), iar bucla internă se încheie pentru a permite alegerea unui nou bloc curent. La sfârșitul buclei interne, se realizează o pauză de 500 de milisecunde (delay(500)) pentru a controla viteza de cădere a blocurilor și pentru a permite actualizarea ecranului. Dacă poziția blocului curent ajunge prea sus pe tablă (poziția posY mai mică decât 1), variabila gameOver este setată pe true, iar jocul se încheie. În afara buclei while, se afișează scorul și se afișează un mesaj de game over pe display-ul LCD. | + | În cadrul buclei interne, se verifică starea butoanelor (buttonState1, buttonState2, buttonState3) și valorile senzorilor analogici (xValue și yValue). În funcție de acestea, se efectuează mișcări ale blocului curent pe tablă, cum ar fi mișcări în stânga, mișcări în dreapta, mișcări în jos sau rotații. Dacă butonul 3 (buttonState3) este apăsat și blocul curent nu este blocat, se efectuează schimbul între blocul curent și blocul ținut (holdBlock), iar bucla internă se încheie pentru a permite alegerea unui nou bloc curent. La sfârșitul buclei interne, se realizează o pauză de 500 de milisecunde (delay(500)) pentru a controla viteza de cădere a blocurilor și pentru a permite actualizarea ecranului. Dacă poziția blocului curent ajunge prea sus pe tablă (poziția posY mai mică decât 1), variabila gameOver este setată pe true, iar jocul se încheie. În afara buclei while, se afișează scorul și se afișează un mesaj de game over pe display-ul LCD. |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | In urma realizarii proiectului, atat din punct de vedere hardware si software am reusit sa implementez o consola portabila si functionala a jocului clasic Tetris. | + | În urma realizării proiectului, atât din punct de vedere hardware cât și software am reușit să implementez o consolă portabilă și funcțională a jocului clasic Tetris. |
{{ :pm:prj2023:adarmaz:t1.jpeg?300 |}} {{ :pm:prj2023:adarmaz:t2.jpeg?300 |}} | {{ :pm:prj2023:adarmaz:t1.jpeg?300 |}} {{ :pm:prj2023:adarmaz:t2.jpeg?300 |}} | ||
{{ :pm:prj2023:adarmaz:t3.jpeg?300 |}} {{ :pm:prj2023:adarmaz:t4.jpeg?300 |}} | {{ :pm:prj2023:adarmaz:t3.jpeg?300 |}} {{ :pm:prj2023:adarmaz:t4.jpeg?300 |}} | ||
Line 69: | Line 69: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Mi-a făcut plăcere să realizez acest proiect, întrucât am reușit să îmbin hardware-ul cu partea de software, astfel încât acest joc distractiv să fie funcțional. | ||
===== Download ===== | ===== Download ===== | ||
Line 76: | Line 77: | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | 10.04 - cumpărat piesele |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
+ | 23.04 - conectat cele 2 ecrane cu SPI | ||
+ | |||
+ | 29.04 - cumpărat mai multe fire și încă un breadboard | ||
+ | |||
+ | 04.05 - asamblat partea hardware | ||
+ | |||
+ | 14.05 - realizat partea software | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | https://www.youtube.com/watch?v=sVQh_2pS-go |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | https://github.com/adafruit/Adafruit-GFX-Library |
+ | |||
+ | https://lastminuteengineers.com/nokia-5110-lcd-arduino-tutorial/ | ||
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||