Differences

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

Link to this comparison view

pm:prj2025:avaduva:andrei.cozma0903 [2025/05/11 22:04]
andrei.cozma0903 [Introducere]
pm:prj2025:avaduva:andrei.cozma0903 [2025/05/25 16:10] (current)
andrei.cozma0903
Line 1: Line 1:
-<note important>​Aceasta este structura recomandată pentru documentația de proiect de pe paginile voastre de wiki. Este o structură minimală, sunteți liberi să adăugați capitole/​subcapitole dacă considerați că este nevoie. Vă rugăm ca toată documentația să fie scrisă în limba **Engleză** </​note>​ 
- 
 ====== Avoidino - Destroy 'n Run ====== ====== Avoidino - Destroy 'n Run ======
 ===== Introducere ===== ===== Introducere =====
Line 6: Line 4:
 Prezentare pe scurt: Prezentare pe scurt:
   * Un joc simplu inspirat puțin din jocul Subway Surfers, afișat pe un ecran LCD și controlat cu un keypad.   * Un joc simplu inspirat puțin din jocul Subway Surfers, afișat pe un ecran LCD și controlat cu un keypad.
-  * Jocul constă în a evita obstacole prin mutări la stânga sau la dreapta, cu posibilitatea de a distruge obstacolele prin tragerea de gloanțe, toate prin intermediul keypad-ului.+  * Jocul constă în a evita obstacole prin mutări la stânga sau la dreapta, cu posibilitatea de a distruge obstacolele prin tragerea de gloanțe ​pentru a te feri și a câștiga mai multe puncte, toate prin intermediul keypad-ului.
   * În timpul jocului, un LED de culoare verde va rămâne aprins, iar la pierderea jocului prin coliziunea cu un obstacol, se va stinge LED-ul verde și se va aprinde cel roșu.   * În timpul jocului, un LED de culoare verde va rămâne aprins, iar la pierderea jocului prin coliziunea cu un obstacol, se va stinge LED-ul verde și se va aprinde cel roșu.
 +  * Se vor auzi zgomote la distrugerea obstacolelor și la pierderea jocului prin intermediul unui buzzer.
 +  * Scopul jocului este pur recreativ.
  
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +{{:pm:​prj2025:​avaduva:​schema_bloc_cozma_andrei.jpg?600|}}
-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ă. +
- +
-Exemplu de schemă bloc [[https://docs.google.com/​drawings/​d/​1UpxRyJNfczJHhNRvWdeb5kh_7IEUy5173odk93W_GSA/​edit?usp=sharing ​aici]]. +
-</​note>​ +
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
 Lista de componente utilizate: Lista de componente utilizate:
-  * Arduino Uno +  * [[https://​ardushop.ro/​ro/​plci-de-dezvoltare/​2282-placa-de-dezvoltare-uno-r3-compatibil-arduino-6427854027122.html?​gad_source=1&​gad_campaignid=22058879462&​gbraid=0AAAAADlKU-6Mwhj2CaAa-5jV0Ic3VkQvP&​gclid=Cj0KCQjwiqbBBhCAARIsAJSfZkbVyDCTc1bebeNp5e5J9NHFTp-tVdRrLhdOlLaeVHEdnzWZikg3MkIaAkReEALw_wcB|Arduino Uno]] 
-  * Buzzer+  * [[https://​www.optimusdigital.ro/​en/​buzzers/​12247-3-v-or-33v-passive-buzzer.html?​gad_source=1&​gad_campaignid=19615979487&​gbraid=0AAAAADv-p3DpzQivl1HoGD6feRIlY_6Bz&​gclid=Cj0KCQjwiqbBBhCAARIsAJSfZkZjYR4r7Dph21T69KdAhGB7SEqX1z984DDLD_E8l6orkxI8kJMbNwMaAqotEALw_wcB|Buzzer]]
   * Breadboard   * Breadboard
-  * Ecran LCD 1.8" SPI 
   * Fire   * Fire
-  * Keypad +  * [[https://​cleste.ro/​ecran-lcd-1-8-spi.html|Ecran LCD 1.8" SPI]] 
-  * Rezistente+  * [[https://​www.emag.ro/​tastatura-matriciala-4x4-ai183-s248/​pd/​D9SFNYMBM/?​ref=cart_item|Keypad]] 
 +  * Rezistențe
   * 2 LED-uri RGB   * 2 LED-uri RGB
 +
 +Schema electrica:
 +
 +{{:​pm:​prj2025:​avaduva:​cozmaandreischema_electrica2.png?​600|}}
 +
 +Detalii despre pini:
 +  * Alocarea pinilor s-a făcut cu scopul de a asigura compatibilitate cu perifericele folosite și de a permite un control eficient la nivel de registru atunci când este necesar.
 +  * Ecranul TFT este conectat prin magistrala SPI, utilizând pinii standard pentru Arduino UNO: pinul digital 10 pentru CS (chip select), 9 pentru DC (data/​command) și 12 pentru reset (RST).
 +  * Tastatura matricială (keypad-ul) este conectată la pinii analogici A0–A4, împărțiți în patru pini de rând (A1–A4) și un pin de coloană (A0), ceea ce permite multiplexarea tastelor fără a consuma pini digitali suplimentari.
 +  * Buzzer-ul este conectat pe pinul digital 3 (PD3), care corespunde ieșirii de tip PWM OC2B a Timerului 2. Alegerea acestui pin permite generarea de semnal audio controlat în mod direct prin setarea registrelor TCCR2A/B și OCR2A/B, în locul folosirii funcției high-level tone().
 +  * LED-urile roșu și verde sunt conectate pe pinii PD5 și PD6, controlați direct prin portul PORTD.
  
 ===== Software Design ===== ===== Software Design =====
  
 +Pentru realizarea componentei software a proiectului,​ am folosit mediul de dezvoltare Arduino IDE, împreună cu două biblioteci externe: TFT.h și SPI.h. Acestea sunt utilizate pentru afișarea graficii jocului pe un ecran TFT conectat prin interfață SPI, oferind funcționalități de desenare rapidă a textului și formelor.
  
-<note tip> +Execuția ​codului ​este structurată în modul următor:
-Descrierea ​codului ​aplicaţiei (firmware):​ +
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, PlatformIO) +
-  * biblioteci şi surse 3rd-party folosite (e.g. Procyon AVRlib) +
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+  * Se declară variabilele globale necesare pentru poziția jucătorului,​ a glonțului, a inamicilor și a stării jocului (viață, scor, viteză inamic, coliziune).
  
-<note tip> +  * În funcția setup() se inițializează ecranul TFT, porturile de control pentru LED-uri, precum și sistemul de sunet. Tot aici se generează o valoare aleatorie pentru poziția inamicilor, folosind analogRead() pentru a inițializa randomSeed().
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+  * Jocul începe cu un ecran de tip intro, care explică comenzile de control: butoanele A și B mută jucătorul stânga/​dreapta,​ C trage un glonț, iar D începe jocul.
  
-===== Cod sursă și alte resurse ce trebuie să existe pe GitHub =====+  * În cadrul funcției loop(), jocul rulează permanent: se citește tastatura, se mișcă inamicul ​și glonțul, se detectează coliziunile,​ se redă sunetul și se actualizează scorul și afișajul. Jocul se oprește în cazul în care se pierd toate viețile, afișând mesajul GAME OVER.
  
-Codul sursă trebuie urcat într-un repo publicrecomandăm GitHub.+  * Jocul funcționează pe un principiu simplu: jucătorul este poziționat în partea de jos a ecranului și poate trage proiectile pentru a distruge inamicii care cad de sus. La fiecare atingere de jos a unui inamicscorul crește, iar la intervale fixe, viteza acestora se accelerează. La coliziune directă, jucătorul pierde o viață. 
 + 
 +În scopul optimizării performanței și pentru o mai bună înțelegere a hardware-ului,​ au fost făcute mai multe modificări:​ 
 + 
 +  * S-a renunțat la utilizarea bibliotecii Keypad.h, implementând în schimb o citire manuală a tastaturii matriciale 4x1. Această abordare permite control complet asupra citirii și debouncing-ului. 
 + 
 +  * În locul funcției tone(), care este blocantă și abstractă, a fost implementat un sistem propriu de generare a sunetului, folosind Timer2 în mod Fast PWM direct pe pinul OC2B (pinul 3 / PD3). Sunetul este redat atât în mod non-blocking (în timpul jocului), cât și în mod blocking (pentru secvențele de la Game Over). Astfel, s-a reușit reducerea latenței în reacțiile vizuale și sonore. 
 + 
 +===== Rezultate Obţinute =====
  
-<note warning>​ +{{:​pm:​prj2025:​avaduva:​cozmaandreirezultat1.jpeg?300|}}
-Structurați-vă pagina de GitHub a proiectului pe mai multe directoareDe exemplu, creați un director numit **src** în care țineți tot codul sursă. Alt director **hardware** în care să țineți schemele și diagramele și alt director numit **images** în care să puneți toate fotografiile cu proiectul vostru, pe care le link-ați în README.md+
  
-Pagina de GitHub a proiectului vostru trebuie să conțină **toate** fișierele relevante pentru realizarea proiectului vostruDacă există resurse externe pe care le-ați folosit, vă rugăm să le link-ați în README.md +{{:​pm:​prj2025:​avaduva:​cozmaandreirezultat2.jpeg?300|}}
-</​note>​+
  
-<note warning>​ +===== Cod sursă - Download =====
-Sunteți încurajați să filmați un demo cu proiectul vostru și să îl încărcați pe YouTube. Faceți embed la video în README.md și în pagina de wiki OCW a proiectului vostru. +
-</​note>​+
  
-===== Jurnal =====+{{:​pm:​prj2025:​avaduva:​cozmaandrei-codproiect.zip|Link download cod sursă}}
  
-<note tip> +===== Demo =====
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/Resurse =====+[[https://​www.youtube.com/​watch?​v=rv_-RGzo10o|Link Demo]]
  
-<​note>​ +===== Export to PDF =====
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +
-</​note>​+
  
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2025/avaduva/andrei.cozma0903.1746990247.txt.gz · Last modified: 2025/05/11 22:04 by andrei.cozma0903
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