Differences

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

Link to this comparison view

pm:prj2026:andrei.batasev:george.jugulete [2026/05/09 11:04]
george.jugulete
pm:prj2026:andrei.batasev:george.jugulete [2026/05/22 16:45] (current)
george.jugulete
Line 13: Line 13:
 Pe parcursul jocurilor vor exista si functii de pauza si revenire in meniu. ​ Pe parcursul jocurilor vor exista si functii de pauza si revenire in meniu. ​
  
-== 2. Componente utilizate ​ ==+== 2. Componente utilizate ==
  
-Componente principale:  +Componente principale:​ 
-  * microcontroller ​(ATmega328P Xplained Mini)  ​ +  * microcontroller ATmega328P Xplained Mini 
-  * display LCD 16x2   +  * display LCD 16x2 
-  * modul interfata ​I2C pentru LCD   +  * modul interfață ​I2C pentru LCD 
-  * matrice LED -joystick analogic  +  * matrice LED controlată prin MAX7219 
-  * 3 butoane ​(pentru meniu, ​pauza si selectare/rotatie/​confirmare pozitie)  ​ +  * joystick analogic ​cu buton 
-Componente de suport:  +  * 3 butoane ​externe ​pentru meniu, ​pauză și confirmare/rotire 
-  * driver pentru matrice LED (MAX7219)  ​ + 
-  * breadboard ​  +Componente de suport: 
-  * fire de conexiune ​  ​ +  * driver pentru matrice LED MAX7219 
-  * rezistent+  * breadboard 
 +  * fire de conexiune 
 +  * cablu USB pentru alimentare și programare
  
 == 3. Periferice utilizate pe microcontroller == == 3. Periferice utilizate pe microcontroller ==
  
-  ​* GPIO : utilizati ​pentru ​butoane si control general.  +Pentru proiect au fost utilizate mai multe periferice ale microcontrollerului ATmega328P:​ 
-  * ADC : utilizat pentru citirea joystick-ului, ​axe X si Y  + 
-  * SPI : utilizat pentru comunicarea cu matricea LED prin modulul MAX7219  +  ​* GPIO: utilizat ​pentru ​citirea butoanelor de pauză, meniu, confirmare și butonul joystick-ului. Butoanele sunt configurate cu INPUT_PULLUP
-  * I2C : utilizat pentru comunicarea cu display-ul LCDprin modulul I2C  +  * ADC: utilizat pentru citirea ​celor două axe analogice ale joystick-ului, ​conectate la A0 și A1. 
-  * Timer: ​utilizat ​pentru ​gestionarea timpului in jocanimatii si eventuale sunete ​+  * SPI: utilizat pentru comunicarea cu modulul MAX7219, care controlează matricele LED. 
 +  * I2C: utilizat pentru comunicarea cu display-ul LCD 16x2 prin modulul I2C. 
 +  * Timer softwarerealizat cu funcția millis(), ​pentru ​mișcarea jocuriloranimații, debounce pentru butoane și efecte de clipire.
  
 == 4. Analiza pinilor == == 4. Analiza pinilor ==
  
-Pentru acest proiectnumarul pinilor necesari este urmatorul:  +În implementarea actualăpinii utilizați sunt: 
-  * pentru ​joystick ​ + 
-  * pentru ​butoane 3  +  * PC0 - axa X a joystick-ului 
-  * pentru ​LCD I2C  +  * PC1 - axa Y a joystick-ului 
-  * pentru ​matricea LED 3  +  * D2 - buton de pauză 
-Totalul pinilor ​se incadreaza in limitele microcontrollerului+  * D3 - buton de revenire în meniu 
 +  * D4 - buton de confirmare / rotire 
 +  * D5 - butonul joystick-ului,​ folosit ​pentru ​cădere rapidă în Tetris 
 +  * PB2 - CS pentru ​MAX7219 
 +  * PB3 - DIN pentru MAX7219 
 +  * PB5 - CLK pentru MAX7219 
 +  * PC4 - comunicație ​I2C pentru LCD 
 +  * PC5 - comunicație I2C pentru ​LCD 
 + 
 +Numărul total de pini utilizați ​se încadrează în limitele microcontrollerului ​ATmega328P. Joystick-ul folosește intrări analogice, butoanele folosesc intrări digitale cu rezistențe interne de pull-up, iar LCD-ul și matricea LED folosesc comunicații seriale pentru a reduce numărul de pini necesari.
  
 == 5. Schema bloc a sistemului == == 5. Schema bloc a sistemului ==
Line 48: Line 61:
 {{:​pm:​prj2026:​andrei.batasev:​schemabloc.png?​200|}} {{:​pm:​prj2026:​andrei.batasev:​schemabloc.png?​200|}}
  
-== 6. Descrierea ​functionare  ​==+== 6. Descrierea ​funcționării ​==
  
-La pornirea consolei se aprinde ecranul ​LCD si se afiseaza un meniu in care jucatorul va avea  +La pornirea consolei se inițializează display-ul ​LCD, matricele LED și butoanele. Pe LCD este afișat meniul principal, unde utilizatorul poate alege unul dintre cele 3 jocuri: Snake, Tetris ​sau Connect 4. Navigarea în meniu se face cu joystick-ul stânga/​dreapta,​ iar selectarea jocului se face cu butonul de confirmare. 
-de selectat intre 3 jocuri: Snake, Tetris ​si Connect 4. Utilizatorul navigheaza printre optiuni ​cu  + 
-ajutorul ​joystick-uluiCand un joc a fost selectatacesta este afisat ​pe matricea LED.  +Meniul are și un text derulant pe primul rând al LCD-uluiiar pe al doilea rând este afișat jocul selectat. După alegerea jocului, ​matricea LED este curățată și începe jocul ales. 
-Pentru jocul Snake, pe matrice ​vor aparea 3 led-uri aprinse ce vor reprezenta corpul sarpelui + 
-led-uri cu luminozitate puternica, iar cu o luminozitate mai slaba vor fi punctele ​pe care sarpele  +Pentru jocul Snake, ​jocul este afișat ​pe două matrice ​LEDpentru a avea zonă de joc mai mare. Șarpele începe cu lungimea 3, iar pe hartă apar puncte de mâncare generate aleator. Mâncarea clipește ​pentru a putea fi diferențiată de corpul șarpelui, ​deoarece matricea ​LED are singură ​culoare. La colectarea mâncării, șarpele creștescorul ​se mărește și viteza de deplasare crește treptatDacă șarpele atinge marginea ​sau propriul corpjocul se termină și se revine în meniu după afișarea scorului. 
-le va colecta ​pentru a se mari. Folosim luminozitati diferite ​deoarece matricea ​ne ofera doar  + 
-singura ​culoare, ​astfel ​se poate face mai usor diferenta dintre corpul sarpelui si puncteRegulile  +Pentru jocul Tetris, ​zona de joc este afișată ​pe trei matrice ​LEDiar a patra matrice este folosită ca panou pentru piesa următoare. Piesele sunt generate aleator și cad automat. Utilizatorul ​poate muta piesa stânga/​dreapta ​cu joystick-ul,​ o poate roti cu butonul de confirmare, iar prin apăsarea butonului ​joystick-ului se accelerează căderea pieseiCând o linie este completăaceasta este ștearsăscorul crește și este afișată o animație scurtă. Jocul se termină atunci când o piesă nouă nu mai poate fi plasată. 
-sunt cele clasice: sa evite sa intre in corpul ​sau si in marginiiar miscarea ​se realizeaza cu  + 
-ajutorul joystick-ului:​ sus – jos – stanga – dreapta.  +Pentru Connect 4, jocul se desfășoară pe o matrice LED de 8x8Cei doi jucători joacă ​pe rând. Coloana curentă este selectată ​cu joystick-ul,​ iar poziția selectată clipește. La apăsarea ​butonului de confirmare, ​piesa cade pe cea mai joasă poziție liberă din coloana ​aleasă, folosind o animație ​de cădere. După fiecare mutare se verifică dacă există ​piese conectate ​vertical, orizontal sau diagonal. ​Dacă un jucător câștigăeste afișat mesajul pe LCD și se rulează o animație pe matrice. 
-Pentru jocul Tetris, pe matrice, ​pe primul rand, va aparea o forma aleatoare predefinita care  + 
-va cadea usor la baza. Utilizatorul ​va putea misca forma cu joystick-ul ​in stanga sau dreapta, o va  +În fiecare joc există buton de pauză și buton de revenire în meniu. Butoanele sunt citite cu debounce ​pentru ​a evita apăsările multiple accidentale.
-putea roti cu butonul ​care in mod normal este de selectie joc, acesta avand mai multe roluri, iar la  +
-apasarea ​joystick-ului se va mari viteza de cadereScopul jocului ​este de a rezista cat mai mult  +
-timp si de a obtine un scor cat mai mareconditia de pierdere fiind ca figurile sa ajunga la  +
-ultimele randuri de sus. De asemeneavor exista aproximativ 5 niveluri de luminozitate pentru a  +
-simula culori diferite.  +
-Pentru Connect 4, va fi nevoie ​de 2 utilizatoriFiecare jucator, ​pe rand, va alege pozitia bilei  +
-cu joystick-ul; se va aprinde led-ul cel mai de sus al coloanei selectate, iar la apasarea ​butonului ​ +
-de confirmare, ​cel de selectare joc, bila va cadea pe cel mai de jos led neaprins de pe coloana ​ +
-respectiva. Scopul jocului este de a conecta ​bile vertical, orizontal sau diagonal. ​Pentru ​un  +
-jucator vor fi led-uri aprinse puterniciar pentru ​celalalt mai slab aprinse.+
  
 == 7. Diagrama de Activitati == == 7. Diagrama de Activitati ==
  
 {{:​pm:​prj2026:​andrei.batasev:​diagrama.png?​300|}} {{:​pm:​prj2026:​andrei.batasev:​diagrama.png?​300|}}
 +
 +== 8. Biblioteci folosite ==
 +
 +Pentru implementarea proiectului au fost folosite următoarele biblioteci:
 +
 +  * Arduino.h - oferă funcțiile de bază pentru programarea microcontrollerului,​ precum pinMode, digitalRead,​ analogRead, delay și millis.
 +  * Wire.h - folosită pentru comunicația I2C cu display-ul LCD.
 +  * LiquidCrystal_I2C.h - folosită pentru controlul ușor al display-ului LCD 16x2 prin modulul I2C.
 +  * LedControl.h - folosită pentru controlul matricelor LED prin driverul MAX7219.
 +  * avr/​pgmspace.h - folosită pentru salvarea formelor pieselor de Tetris în memoria programului,​ pentru a reduce folosirea memoriei RAM.
 +
 +Alegerea acestor biblioteci a fost făcută pentru a simplifica lucrul cu modulele hardware și pentru a permite concentrarea pe logica jocurilor. LCD-ul și matricea LED sunt controlate prin biblioteci dedicate, iar acest lucru reduce codul necesar pentru comunicația directă cu dispozitivele.
 +
 +== 9. Video si imagini proiect ==
 +
 +[[https://​youtube.com/​shorts/​DC7FhxdJjtc?​feature=share|Video demonstrație proiect]]
 +
 +{{:​pm:​prj2026:​andrei.batasev:​retrogames_1.jpg?​200|}}
 +{{:​pm:​prj2026:​andrei.batasev:​retrogames_2.jpg?​200|}}
 +{{:​pm:​prj2026:​andrei.batasev:​retrogames_3.jpg?​200|}}
 +
 +
 +
  
pm/prj2026/andrei.batasev/george.jugulete.1778313858.txt.gz · Last modified: 2026/05/09 11:04 by george.jugulete
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