Differences

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

Link to this comparison view

pm:prj2025:atoader:catalin.giuglan [2025/05/25 21:20]
catalin.giuglan [Implementarea Hardware:]
pm:prj2025:atoader:catalin.giuglan [2025/05/28 16:00] (current)
catalin.giuglan [Implementarea Hardware:]
Line 52: Line 52:
 </​note>​ </​note>​
  
-====== Implementarea Hardware: ======+{{:​pm:​prj2025:​atoader:​catalin_pong.jpg?​650|}}====== Implementarea Hardware: ====== 
  
  
-{{:​pm:​prj2025:​atoader:​catalin_pong.jpg?​650|}} 
 ===== Software Design ===== ===== Software Design =====
  
  
 <note tip> <note tip>
-Descrierea codului aplicaţiei (firmware)+**IDE folosit:** 
-  * mediu de dezvoltare ​(if any(e.g. AVR StudioCodeVisionAVR+  *Am folosit **ArduinoIDE** pentru a implementa software-ul. 
-  * librării şsurse 3rd-party (e.g. Procyon AVRlib+ 
-  * algoritmi şstructuri pe care plănuiţsă le implementaţ+**Biblioteci utilizate:​** 
-  * (etapa 3surse şi funcţii implementate+  *Wire.h 
 +  *SPI.h 
 +  *U8g2lib.h 
 +  *SdFat.h 
 + 
 +**Funcții:​** 
 + 
 +  *void setup() - Inițializează componentele hardware, verifică fișierul muzical de pe SD și calibrează joystick-urile. 
 +  *void loop() - Gestionează logica joculuiredă muzica și actualizează ecranul și pozițiile elementelor în mod continuu. 
 +  *void drawFrame(- Desenează întreaga scenă de joc: terenul, scorul, mingea și playerii. 
 +  *void resetGame() - Plasează mingea într-o poziție aleatorie șîi setează o direcție nouă de mișcare. 
 +  *void drawCourt() ​Desenează cadrul terenului de joc pe afișaj ​(un dreptunghi de 128x64 pixeli). 
 +  *void drawScore(- Afișează scorurile celor doi jucători pe ecran. 
 +  *void gameOver() - Afișează ecranul de final șanunță jucătorul câștigător,​ apoi resetează scorurile șmingea. 
 +  *void updateBallPosition() - Calculează noua poziție a mingii șgestionează coliziunile cu pereții, playerii și dacă s-a marcat sau nu un punct. 
 +  *void updatePaddlePositions() - Citește pozițiile joystick-urilor șactualizează paletele în funcție de mișcare. 
 +  *void constrainPaddlePosition(uint8_t &​paddle_y) - Asigură că playerul nu iese în afara ecranului. 
 +  *void soundBounce() - Redă un sunet scurt când mingea lovește un player sau marginea orizontală. 
 +  *void soundPoint() - Redă un sunet diferit când se marchează un punct. 
 +  *void initMusic() - Deschide fișierul mario.txt de pe cardul SD dacă nu a fost deja deschis. 
 +  *void playMarioTheme() - Redă notele muzicale din fișierul mario.txt, una câte una.
 </​note>​ </​note>​
  
Line 71: Line 91:
 <note tip> <note tip>
 Care au fost rezultatele obţinute în urma realizării proiectului vostru. Care au fost rezultatele obţinute în urma realizării proiectului vostru.
 +
 +  ***Funcționalitate completă a jocului:** Proiectul reprezintă o implementare completă a clasicului joc Pong, utilizând o placă Arduino Uno. Afișajul jocului se face pe un ecran OLED, cititorul de card SD preia muzica, iar aceasta este redată de Buzzer pe tot parcursul jocului. În plus, buzzerul scoate câte un sunet și la fiecare coliziune a bilei cu un perete, sau când un jucător marchează un punct.
 +  ***Afișaj clar și precis:** Biblioteca **U8g2lib** pentru grafica de pe ecran asigură un afișaj clar și precis al jocului, inclusiv grafică simplă pentru teren, palete, minge și scor.
 +  ***Citirea datelor:** Folosirea bibliotecii **SdFat** pentru a asigura citirea clară a datelor de pe cardul SD.
 +
 +Video: https://​youtu.be/​NPU42rhr9dE?​si=4Mh1g0Y9_OWcb08r
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +<note tip>
 +Acesta a fost primul proiect hardware pe care l-am realizat și pot spune că mi-a făcut deosebită plăcere să lucrez la el. Consider că, în ciuda timpului investit în finalizarea acestui proiect, satisfacția de la final merită pe deplin orele petrecute experimentând și învățând să folosesc Arduino.
 +
 +Sunt mândru că am reușit să implementez acest proiect, rezultând într-un joc simplu dar captivant!
 +</​note>​
 ===== Download ===== ===== Download =====
  
 <note warning> <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 şcopiere automată pe uC crează întotdeauna o impresie bună ;-). +Arhiva conține codul Arduino șvideoclipul demo de prezentare al proiectului{{:pm:prj2025:atoader:pong.zip|}}
- +
-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**.+
 </​note>​ </​note>​
- 
 ===== Jurnal ===== ===== Jurnal =====
  
Line 92: Line 120:
  
 <​note>​ <​note>​
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**.+  ​*[[https://​www.optimusdigital.ro/​|Optimus Digital]] 
 +  ​*[[https://​www.emag.ro/​|Emag]] 
 +  ​*[[https://​www.tinkercad.com/​|Tinkercad]]
 </​note>​ </​note>​
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2025/atoader/catalin.giuglan.1748197229.txt.gz · Last modified: 2025/05/25 21:20 by catalin.giuglan
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