This shows you the differences between two versions of the page.
|
pm:prj2026:ciprian.popescu0411:vlad_mihai.enea [2026/05/13 15:43] 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?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 PlatformIO, folosind framework-ul Arduino pentru placa ATmega328P Xplained Mini. Codul 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 Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon 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 ===== | ||