Arduino Pong Game

Introducere

Proiectul meu constă într-un joc de Pong implementat pe o placă Arduino, în care joc împotriva calculatorului. Scopul jocului este să împing mingea către partea opusă și să evit ca ea să treacă de marginea terenului meu.

Ideea mea a fost de a crea un joc simplu și distractiv care să ilustreze potențialul plăcilor de dezvoltare Arduino. Am dorit să demonstrez că aceste plăci nu sunt limitate doar la proiecte tehnice, ci pot fi folosite și pentru a crea jocuri.

Consider că jocul meu de Pong implementat pe Arduino este util pentru ceilalți pentru că poate fi folosit ca sursă de distracție, dar și ca mod de a învăța și de a înțelege mai bine programarea în limbajul Arduino. De asemenea, este util și pentru mine, deoarece îmi oferă oportunitatea de a-mi dezvolta abilitățile de programare și de a explora potențialul plăcilor de dezvoltare Arduino.

Descriere generală

În jocul de Pong implementat pe Arduino, piesele implicate interacționează astfel:

Arduino Uno - este creierul jocului de Pong, gestionând toate intrările și ieșirile din joc și procesând logica acestuia. Este conectat la celelalte componente prin intermediul pinilor digitali și analogici.

Push Buttons - cele două butoane sunt utilizate pentru a controla mișcarea paletei de joc. Butonul stâng este folosit pentru a muta paleta în sus, iar butonul drept pentru a muta paleta în jos. Butonul este conectat la pinii digitali ai Arduino Uno, iar acesta trimite semnale către placă atunci când un buton este apăsat.

Color OLED - este afișajul jocului, care afișează mingea, paletele și scorul jocului. Este conectat la pinii digitali și analogici ai Arduino Uno, care trimite semnale de control pentru a afișa informațiile dorite.

În timpul jocului, Arduino Uno primește semnale de la butoanele Push Button pentru a muta paleta de joc în sus și în jos și detectează coliziunile mingii cu paletele de joc. Arduino Uno calculează, de asemenea, scorul jocului și actualizează afișajul Color OLED în consecință. În cele din urmă, Arduino Uno utilizează semnalele trimise la Color OLED pentru a afișa informațiile dorite în timpul jocului.

În general, fiecare componentă joacă un rol esențial în funcționarea jocului de Pong pe Arduino și interacțiunea dintre ele este esențială pentru ca jocul să funcționeze corect și să ofere o experiență de joc plăcută.

Hardware

Lista Componente:

1. Arduino Uno: Este o placă microcontroller bazată pe microcontrolerul ATmega328P. Acesta acționează ca unitate centrală de procesare și control a jocului de Pong. Arduino Uno are mai mulți pini digitali și analo-gici care permit conectarea și comunicarea cu celelalte componente ale jocului.

2. Push Buttons (butoane de tip push): Acestea sunt două butoane fizice de tip push, care sunt utilizate pentru a controla mișcarea paletei în joc. Fiecare buton este conectat la un pin digital al Arduino Uno. Atunci când un buton este apăsat, circuitul electric se închide și Arduino primește un semnal că butonul a fost apăsat.

3. Color OLED (ecran color OLED): Acesta este un afișaj grafic care prezintă vizual elementele jocului, inclusiv mingea, paletele și scorul. Afișajul color OLED este conectat la pini digitali și analo-gici ai Arduino Uno. Arduino trimite semnale către afișajul OLED pentru a afișa informațiile corespunzătoare, cum ar fi poziția și dimensiunea pale-telor, poziția mingii și scorul jocului.

4. Comunicare între componente: În timpul jocului, Arduino Uno primește semnale de la butoanele push pentru a detecta comenzile de la jucător și pentru a muta paleta de joc în sus sau în jos. De asemenea, Arduino Uno monitorizează poziția mingii și detectează coliziunile acesteia cu paletele de joc. Pe baza acestor informații, Arduino Uno calculează scorul și actualizează afișajul Color OLED pentru a reflecta modificările.

5. Interacțiunea Arduino Uno cu Color OLED: Arduino Uno transmite semnale către afișajul Color OLED prin intermediul pinilor digitali și analogici. Aceste semnale controlează afișajul și indică ce informații trebuie afișate, cum ar fi poziția și dimensiunea pale-telor, poziția mingii și scorul jocului. Astfel, Arduino Uno și afișajul Color OLED colaborează pentru a asigura o afișare corectă și actualizată a elementelor jocului pe ecran.

În concluzie, fiecare componentă din jocul de Pong implementat pe Arduino are un rol important în funcționarea și interacțiunea sistemului. Arduino Uno acționează ca unitate centrală de procesare și comunicare, primind intrări de la butoanele push, efectuând calcule și actualizând afișajul Color OLED. Prin interacțiunea corectă între aceste componente, jocul de Pong poate fi jucat, iar experiența de joc poate fi oferită într-un mod plăcut și funcțional.

Software

În primele linii ale codului, sunt incluse bibliotecile necesare pentru a comunica cu afișajul OLED și pentru a interacționa cu butoanele. Acestea includ bibliotecile SPI și Wire pentru comunicația serială și bibliotecile Adafruit_GFX și Adafruit_SSD1306 pentru controlul afișajului OLED.

Sunt definite câteva constante și variabile pentru configurarea jocului. Acestea includ:

UP_BUTTON și DOWN_BUTTON: Pinii la care sunt conectate butoanele pentru controlul mișcării paletelor. PADDLE_RATE și BALL_RATE: Viteza cu care paleta și mingea se actualizează și se mișcă. PADDLE_HEIGHT: Înălțimea paletelor jucătorului și calculatorului. SCREEN_WIDTH și SCREEN_HEIGHT: Dimensiunile afișajului OLED. OLED_RESET: Pinul utilizat pentru resetarea afișajului OLED. display: Obiectul care gestionează comunicarea și controlul afișajului OLED. ball_x, ball_y: Coordonatele mingii pe afișaj. ball_dir_x, ball_dir_y: Direcțiile de deplasare ale mingii pe axele X și Y. ball_update: Momentul în timp când mingea trebuie actualizată. paddle_update: Momentul în timp când pozițiile paletelor trebuie actualizate. CPU_X, cpu_y: Poziția calculatorului pe axa X și Y. PLAYER_X, player_y: Poziția jucătorului pe axa X și Y. În funcția setup(), se inițializează afișajul OLED, se configurează pinii pentru butoane și se pregătește afișajul pentru joc. Aceasta include:

Inițializarea comunicării cu afișajul OLED folosind display.begin(SSD1306_SWITCHCAPVCC, 0x3C). Curățarea afișajului și desenarea terenului de joc utilizând funcția drawCourt(). Afișarea imaginii pe afișaj folosind display.display(). Așteptarea timp de 2 secunde pentru a permite jucătorului să vadă ecranul de pornire. Inițializarea momentului ball_update și paddle_update pentru a urmări momentul în care mingea și paleta trebuie actualizate. În funcția loop(), se verifică starea butoanelor și se actualizează starea jocului. Aceasta include:

Verificarea dacă a fost apăsată oricare dintre butoanele de control (UP_BUTTON sau DOWN_BUTTON) și setarea unor variabile de stare corespunzătoare (up_state și down_state). Verificarea momentului curent (time) pentru a decide dacă mingea și paletelor trebuie să li se actualizeze pozițiile. Actualizarea poziției mingii în funcție de direcția de deplasare și de coliziunile cu marginile afișajului și paletelor adversarilor. Actualizarea pozițiilor paletelor în funcție de poziția mingii și a direcției. Afișarea noilor poziții ale mingii și paletelor pe afișaj utilizând funcția display.drawFastVLine() pentru desenarea paletelor și funcțiile display.drawPixel() pentru desenarea mingii. Actualizarea afișajului utilizând display.display(). Funcția drawCourt() este utilizată pentru a desena terenul de joc pe afișaj. Aceasta utilizează funcția display.drawRect() pentru a desena un chenar alb în jurul terenului.

În final, ciclul se repetă continuu în funcția loop() pentru a actualiza și afișa starea jocului în mod constant. Acestia sunt pașii de bază ai codului pentru jocul Pong.

Rezultate Obţinute

În timp ce am lucrat la proiectul de implementare a jocului Pong pe o placă Arduino, am învățat o mulțime de lucruri interesante. Am explorat conceptele de bază ale jocurilor și am înțeles cum funcționează paleta de control, mingea și sistemul de punctaj. Am avut ocazia să proiectez interfața jocului și să o implementez pe ecranul Arduino, adăugând grafice simple pentru a reprezenta paleta și mingea. De asemenea, am învățat să afișez informații importante, cum ar fi scorul. Pe parcursul proiectului, am dobândit abilități noi în jocul Pong, concentrându-mă pe coordonarea mișcărilor mele pentru a returna mingea în mod eficient și pentru a obține un scor cât mai mare. Este o experiență captivantă care m-a ajutat să înțeleg mai bine logica jocurilor și să dezvolt abilități practice în programare și interacțiune cu componentele hardware.

Concluzii

În concluzie, proiectul de implementare a jocului Pong pe o placă Arduino a fost o experiență valoroasă și plină de învățăminte. Pe parcursul acestui proiect, am avut ocazia de a explora și de a aplica cunoștințele acumulate în programare și interacțiunea cu componente hardware. Am învățat să programez în limbajul Arduino și să utilizez bibliotecile și interfețele specifice pentru a controla ecranul OLED și butoanele/joystick-urile.

Implementarea jocului Pong mi-a permis să înțeleg și să aplic concepte fundamentale ale jocurilor, cum ar fi paleta de control, mingea și sistemul de punctaj. Am experimentat procesul de proiectare a interfeței utilizatorului și am învățat cum să afișăm informații relevante pe ecran. De asemenea, am avut ocazia de a-mi îmbunătăți abilitățile de joc Pong prin practică și iterație, concentrându-ma pe coordonarea mișcărilor și obținerea unui scor cât mai mare.

Proiectul a adus cu sine și provocări, cum ar fi gestionarea corectă a coliziunilor, sincronizarea jocului și optimizarea performanței. Aceste provocări m-au încurajat să caut soluții creative și să mi extind cunoștințele în domeniul dezvoltării jocurilor.

În final, proiectul de implementare a jocului Pong pe o placă Arduino a reprezentat o oportunitate excelentă de a aplica teoria în practică și de a dezvolta abilități practice în domeniul programării și al interacțiunii cu hardware-ul. Acest proiect a consolidat cunoștințele mele și m-a inspirat să explorez și alte proiecte în viitor.

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Arduino_datasheet: https://docs.arduino.cc/static/32b4941b81a2c6a5308e0e9bd348d0e6/A000066-datasheet.pdf arduino oled i2c tutorial : 0.96” 128 X 32 for beginners https://www.youtube.com/watch?v=_KD7skmusTQ How PONG Works: From Schematic to PCB to Console https://www.youtube.com/watch?v=iF7lo0vU_WI

pm/prj2023/apredescu/iordache.txt · Last modified: 2023/05/30 21:31 by clara.iordache
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