Differences

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

Link to this comparison view

pm:prj2026:ciprian.popescu0411:vlad_mihai.enea [2026/05/13 15:44]
vlad_mihai.enea [Hardware Design]
pm:prj2026:ciprian.popescu0411:vlad_mihai.enea [2026/05/13 16:42] (current)
vlad_mihai.enea [Software Design]
Line 3: Line 3:
  
     * Proiectul consta in implementarea unui joc de tip Pong pentru doi jucatori utilizand o placa de dezvoltare ATmega328P Xplained Mini, un display OLED 128x64 si module LED pentru feedback vizual. Fiecare jucator controleaza o paleta prin intermediul a doua butoane, unul pentru deplasarea in sus si unul pentru deplasarea in jos. Scopul jocului este de a lovi mingea si de a inscrie puncte impotriva adversarului.     * Proiectul consta in implementarea unui joc de tip Pong pentru doi jucatori utilizand o placa de dezvoltare ATmega328P Xplained Mini, un display OLED 128x64 si module LED pentru feedback vizual. Fiecare jucator controleaza o paleta prin intermediul a doua butoane, unul pentru deplasarea in sus si unul pentru deplasarea in jos. Scopul jocului este de a lovi mingea si de a inscrie puncte impotriva adversarului.
-===== Descriere ​generală ​=====+===== Descriere ​generala ​=====
  
  
Line 54: Line 54:
 | Breadboard | GND microcontroller -> bara GND breadboard | | Breadboard | GND microcontroller -> bara GND breadboard |
  
-      *Breadboard-ul este folosit pentru distribuirea conexiunii de masa catre butoane, buzzer si modulele LED. Display-ul OLED este conectat direct la microcontroller deoarece foloseste interfata I2C, prin pinii PC4 si PC5. Butoanele sunt configurate in cod cu INPUT_PULLUP,​ motiv pentru care pinul de mijloc al modulelor KY-004 ramane neconectat, iar apasarea butonului conecteaza pinul de semnal la GND.+Breadboard-ul este folosit pentru distribuirea conexiunii de masa catre butoane, buzzer si modulele LED. Display-ul OLED este conectat direct la microcontroller deoarece foloseste interfata I2C, prin pinii PC4 si PC5. Butoanele sunt configurate in cod cu INPUT_PULLUP,​ motiv pentru care pinul de mijloc al modulelor KY-004 ramane neconectat, iar apasarea butonului conecteaza pinul de semnal la GND.
  
-{{:​pm:​prj2026:​ciprian.popescu0411:​milestone_hardware_vlad.jpeg?​070|}}+{{:​pm:​prj2026:​ciprian.popescu0411:​milestone_hardware_vlad.jpeg?​300|}}
 ===== Software Design ===== ===== Software Design =====
  
 +      * Demo joc: https://​youtu.be/​aooiB0Amov8?​feature=shared
 +      * github: https://​github.com/​vled04/​PONG-GAME-PM
  
-<note tip> +Proiectul a fost dezvoltat in PlatformIOfolosind framework-ul Arduino pentru placa ATmega328P Xplained MiniCodul este scris in C++ si foloseste functii specifice Arduino pentru citirea butoanelor, controlul LED-urilor, controlul buzzerului, comunicatia I2C cu display-ul OLED si comunicatia UART prin Serial Monitor.
-Descrierea codului aplicaţiei (firmware):​ +
-  * mediu de dezvoltare (if any) (e.g. AVR StudioCodeVisionAVR) +
-  * librării şi surse 3rd-party (e.gProcyon AVRlib) +
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+Functii principale implementate:​
  
-<note tip> +^ Functie ^ Rol ^ 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+| setup() | Initializeaza pinii pentru butoane, buzzer si LED-uri, porneste comunicatia I2C, initializeaza display-ul OLED si pregateste ecranul initial al jocului| 
-</note>+| loop() | Reprezinta bucla principala a jocului. Verifica daca jocul a inceput, citeste input-ul jucatorilor,​ actualizeaza pozitia mingii, verifica coliziunile,​ scorul si redeseneaza ecranul. | 
 +| readPaddles() | Citeste cele patru butoane si modifica pozitia paletelor pentru Player 1 si Player 2. | 
 +| drawGame() | Deseneaza pe OLED scorul, viteza bilei, terenul, paletele si mingea. | 
 +| drawStartScreen() | Afiseaza ecranul initial, cu mesajul PONG si instructiunea de apasare a unui buton. | 
 +| drawCountdownGameScreen() | Afiseaza ecranul de pregatire inainte de inceperea meciului, pastrand vizibile paletele si mingea. | 
 +| drawWinScreen() | Afiseaza castigatorul meciului: P1 WINS sau P2 WINS. | 
 +| startCountdown() | Porneste secventa de pregatire inainte de meci, folosind LED-urile rosu, galben si verde. | 
 +| checkWallCollision() | Verifica daca mingea atinge bara de sus sau de jos si inverseaza directia pe axa Y. | 
 +| checkPaddleCollision() | Verifica daca mingea loveste una dintre palete si recalculeaza directia de ricosare in functie de zona lovita. | 
 +| checkScore() | Verifica daca mingea a iesit din teren prin stanga sau dreapta si actualizeaza scorul. | 
 +| handleWin() | Verifica daca un jucator a ajuns la scorul maxim si afiseaza castigatorul. | 
 +| goalFlash() | Controleaza LED-urile dupa marcarea unui punct: verde pentru jucatorul care a marcat si rosu pentru cel care a primit punctul. | 
 +| winLEDAnimation() | Controleaza animatia LED-urilor la finalul meciului. | 
 +| beep() | Genereaza sunete pe buzzer folosind functia tone(). | 
 +| increaseBallSpeed() | Creste viteza bilei treptat, pana la o limita maxima. | 
 +| resetBallRandom() | Reseteaza mingea in centru si alege aleator directia initiala. | 
 +| resetBallToDirection() | Reseteaza mingea in centru si seteaza directia catre un anumit jucator. | 
 +| printRoundResult() | Afiseaza in Serial Monitor castigatorul rundei si viteza initiala/maxima a bilei. |
  
-===== Concluzii =====+Biblioteci folosite:
  
-===== Download =====+^ Biblioteca ^ Rol ^ 
 +| Arduino.h | Functii de baza Arduino: GPIO, timere, delay, millis | 
 +| Wire.h | Comunicare I2C cu display-ul OLED | 
 +| Adafruit_GFX.h | Functii grafice pentru desenarea elementelor pe display | 
 +| Adafruit_SSD1306.h | Controlul display-ului OLED SSD1306 | 
 +| math.h | Functii matematice pentru calculul directiei bilei |
  
-<note warning> 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). 
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +===== Concluzii =====
-</​note>​+
  
-===== Jurnal =====+      *Pentru PM FAIR o sa cumpar o cutie din plastic si o sa aranjez frumos toate componentele pentru a fi si frumos vizual
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2026/ciprian.popescu0411/vlad_mihai.enea.1778676299.txt.gz · Last modified: 2026/05/13 15:44 by vlad_mihai.enea
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