Differences

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

Link to this comparison view

pm:prj2023:apredescu:iordache [2023/05/08 08:43]
clara.iordache [Descriere generală]
pm:prj2023:apredescu:iordache [2023/05/30 21:31] (current)
clara.iordache [Concluzii]
Line 23: Line 23:
  
 {{:​pm:​prj2023:​apredescu:​anto_bloc.png?​300|}} {{:​pm:​prj2023:​apredescu:​anto_bloc.png?​300|}}
-===== Hardware Design ===== 
  
-<note tip> +==Hardware== 
-Aici puneţi tot ce ţine de hardware design: +Lista Componente:
-  * listă de piese +
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +
-  * diagrame de semnal  +
-  * rezultatele simulării +
-</​note>​+
  
-===== Software Design =====+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.
  
-<note tip> +3. Color OLED (ecran color OLED): Acesta este un afișaj grafic care prezintă vizual elementele jocului, inclusiv mingeapaletele șscorul. Afișajul color OLED este conectat la pini digitali și analo-gici ai Arduino UnoArduino trimite semnale către afișajul OLED pentru a afișa informațiile corespunzătoare, cum ar fi poziția șdimensiunea pale-telor, poziția mingii șscorul jocului.
-Descrierea codului aplicaţiei ​(firmware): +
-  * mediu de dezvoltare (if any) (e.g. AVR StudioCodeVisionAVR) +
-  * librării şsurse 3rd-party (e.g. Procyon AVRlib) +
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şfuncţii implementate +
-</​note>​+
  
 +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.
 +
 +{{:​pm:​prj2023:​apredescu:​816660a5-8c10-4c61-afc6-225d7129eeb3.jpeg?​200|}}
 +
 +==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 ===== ===== Rezultate Obţinute =====
  
-<note tip> +Î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
-Care au fost rezultatele obţinute ​în urma realizării proiectului ​vostru+{{:​pm:​prj2023:​apredescu:​2a0ab99b-052b-436c-94c2-b8ff73177d97.jpeg?​200|}}===== Concluzii =====
-</​note>​+
  
-===== 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.
  
-===== Download =====+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.
  
-<note warning>​ +Proiectul a adus cu sine și provocăricum ar fi gestionarea corectă a coliziunilorsincronizarea jocului ș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.
-O arhivă (sau mai multe dacă este cazul) ​cu fişierele obţinute în urma realizării proiectului:​ sursescheme, etc. Un fişier READMEun ChangeLog, un script de compilare ş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**+Î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-ulAcest proiect a consolidat cunoștințele mele și m-a inspirat să explorez și alte proiecte în viitor
-</​note>​+===== Download =====
  
 ===== Jurnal ===== ===== Jurnal =====
Line 68: Line 100:
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +Arduino_datasheet:​ https://​docs.arduino.cc/​static/​32b4941b81a2c6a5308e0e9bd348d0e6/​A000066-datasheet.pdf 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+arduino oled i2c tutorial : 0.96" ​128 X 32 for beginners https://​www.youtube.com/​watch?v=_KD7skmusTQ 
-</​note>​ +How PONG Works: From Schematic to PCB to Console https://www.youtube.com/​watch?​v=iF7lo0vU_WI
- +
-<​html><​a class="​media mediafile mf_pdf"​ href="?do=export_pdf">​Export ​to PDF</a></html> +
pm/prj2023/apredescu/iordache.1683524633.txt.gz · Last modified: 2023/05/08 08:43 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