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:02]
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 ==
  
 {{:​pm:​prj2026:​andrei.batasev:​schemabloc.png?​200|}} {{:​pm:​prj2026:​andrei.batasev:​schemabloc.png?​200|}}
 +
 +== 6. Descrierea funcționării ==
 +
 +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.
 +
 +Meniul are și un text derulant pe primul rând al LCD-ului, iar 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, jocul este afișat pe două matrice LED, pentru a avea o 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 o singură culoare. La colectarea mâncării, șarpele crește, scorul se mărește și viteza de deplasare crește treptat. Dacă șarpele atinge marginea sau propriul corp, jocul se termină și se revine în meniu după afișarea scorului.
 +
 +Pentru jocul Tetris, zona de joc este afișată pe trei matrice LED, iar 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 piesei. Câ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ă.
 +
 +Pentru Connect 4, jocul se desfășoară pe o matrice LED de 8x8. Cei 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ă 4 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.
 +
 +Î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.
 +
 +== 7. Diagrama de Activitati ==
 +
 +{{:​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.1778313777.txt.gz · Last modified: 2026/05/09 11:02 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