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 10:55]
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:​ 
 +  * microcontroller ATmega328P Xplained Mini 
 +  * display LCD 16x2 
 +  * modul interfață I2C pentru LCD 
 +  * matrice LED controlată prin MAX7219 
 +  * joystick analogic cu buton 
 +  * 3 butoane externe pentru meniu, pauză și confirmare/​rotire 
 + 
 +Componente de suport: 
 +  * driver pentru matrice LED MAX7219 
 +  * breadboard 
 +  * fire de conexiune 
 +  * cablu USB pentru alimentare și programare 
 + 
 +== 3. Periferice utilizate pe microcontroller == 
 + 
 +Pentru proiect au fost utilizate mai multe periferice ale microcontrollerului ATmega328P:​ 
 + 
 +  * GPIO: utilizat pentru citirea butoanelor de pauză, meniu, confirmare și butonul joystick-ului. Butoanele sunt configurate cu INPUT_PULLUP. 
 +  * ADC: utilizat pentru citirea celor două axe analogice ale joystick-ului,​ conectate la A0 și A1. 
 +  * SPI: utilizat pentru comunicarea cu modulul MAX7219, care controlează matricele LED. 
 +  * I2C: utilizat pentru comunicarea cu display-ul LCD 16x2 prin modulul I2C. 
 +  * Timer software: realizat cu funcția millis(), pentru mișcarea jocurilor, animații, debounce pentru butoane și efecte de clipire. 
 + 
 +== 4. Analiza pinilor == 
 + 
 +În implementarea actuală, pinii utilizați sunt: 
 + 
 +  * PC0 - axa X a joystick-ului 
 +  * PC1 - axa Y a joystick-ului 
 +  * D2 - buton de pauză 
 +  * 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 == 
 + 
 +{{:​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|}} 
 + 
 + 
  
-Componente principale: ​ 
--microcontroller (ATmega328P Xplained Mini)  ​ 
--display LCD 16x2  ​ 
--modul interfata I2C pentru LCD  ​ 
--matrice LED -joystick analogic ​ 
--3 butoane (pentru meniu, pauza si selectare/​rotatie/​confirmare pozitie)  ​ 
-Componente de suport: ​ 
--driver pentru matrice LED (MAX7219)  ​ 
--breadboard  ​ 
--fire de conexiune ​   
--rezistent 
pm/prj2026/andrei.batasev/george.jugulete.1778313355.txt.gz · Last modified: 2026/05/09 10:55 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