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):

  • -GND
  • -5V
  • -VRx - conectat la A0 pentru Player1 si A2 pentru Player2

!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:

  • Am folosit ArduinoIDE pentru a implementa software-ul.

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

pm/prj2025/atoader/catalin.giuglan.txt · Last modified: 2025/05/28 16:00 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