Differences

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

Link to this comparison view

pm:prj2023:adarmaz:tetris-game [2023/05/28 22:38]
rares_gabriel.turcu [Introducere]
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 =====
  
Line 8: Line 8:
 ===== 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ă implementezmetode 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>​ 
  
pm/prj2023/adarmaz/tetris-game.1685302725.txt.gz · Last modified: 2023/05/28 22:38 by rares_gabriel.turcu
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