Joc Pong
Introducere
Prezentarea pe scurt a proiectului vostru:
O implementare a jocului clasic Pong, în care fiecare jucător folosește un joystick pentru a deplasa “playerul” sus-jos. Jocul va fi afisat pe un display, iar pe cardul SD voi avea încarcată o melodie care va fi redată în timpul jocului. Voi folosi un cititor de card SD si un buzzer pentru a reda sunetul.
Descriere generală
O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.
Joystick (ADC): permite jucătorilor să se miște sus-jos.
Display (I2C): afișează jocul.
Cititor card SD (SPI): descarcă de pe cardul de memorie melodia care va fi redată pe parcursul jocului.
Buzzer (PWM): redă o melodie pe parcursul jocului.
!Potentiometrele din schema reprezinta Joystick-uri!
Pinii (de la stanga la dreapta):
!Piesa de pe breadboard-ul din stanga reprezinta un cititor de card SD!
Pinii (de la stanga la dreapta):
-GND
-3V3
-5V
-CS
-MOSI
-SCK
-MISO
-GND
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html
Hardware Design
Componente folosite:
Arduino Uno
Display OLED
Buzzer
Cititor de card SD
Breadboard
2 joystick-uri
Fire
Implementarea Hardware:
Software Design
IDE folosit:
Biblioteci utilizate:
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 jocului, redă 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 îi setează o direcție nouă de mișcare.
void drawCourt() - Desenează cadrul terenului de joc pe afișaj (un dreptunghi de 128×64 pixeli).
void drawScore() - Afișează scorurile celor doi jucători pe ecran.
void gameOver() - Afișează ecranul de final și anunță jucătorul câștigător, apoi resetează scorurile și mingea.
void updateBallPosition() - Calculează noua poziție a mingii și gestionează coliziunile cu pereții, playerii și dacă s-a marcat sau nu un punct.
void updatePaddlePositions() - Citește pozițiile joystick-urilor și 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.
Rezultate Obţinute
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
Concluzii
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!
Download
Arhiva conține codul Arduino și videoclipul demo de prezentare al proiectului:
pong.zip
Jurnal
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
Bibliografie/Resurse