Differences

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

Link to this comparison view

pm:prj2025:avaduva:andrei.cozma0903 [2025/05/25 15:43]
andrei.cozma0903
pm:prj2025:avaduva:andrei.cozma0903 [2025/05/25 16:10] (current)
andrei.cozma0903
Line 8: Line 8:
   * Se vor auzi zgomote la distrugerea obstacolelor și la pierderea jocului prin intermediul unui buzzer.   * Se vor auzi zgomote la distrugerea obstacolelor și la pierderea jocului prin intermediul unui buzzer.
   * Scopul jocului este pur recreativ.   * Scopul jocului este pur recreativ.
 +
 ===== Descriere generală ===== ===== Descriere generală =====
  
 {{:​pm:​prj2025:​avaduva:​schema_bloc_cozma_andrei.jpg?​600|}} {{:​pm:​prj2025:​avaduva:​schema_bloc_cozma_andrei.jpg?​600|}}
 +
 ===== Hardware Design ===== ===== Hardware Design =====
  
Line 25: Line 27:
 Schema electrica: Schema electrica:
  
-{{:​pm:​prj2025:​avaduva:​cozmaandreischema_electrica.png?600|}}+{{:​pm:​prj2025:​avaduva:​cozmaandreischema_electrica2.png?600|}}
  
 Detalii despre pini: Detalii despre pini:
Line 31: Line 33:
   * 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).   * 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.   * 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 ​de nivel înalt ​tone(). +  * 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. Această mapare a pinilor reflectă atât constrângerile hardware ale plăcii, cât și obiectivul de a lucra cât mai aproape de nivelul de registru.+  * 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 StudioPlatformIO+  * 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)
-  * biblioteci şsurse 3rd-party folosite ​(e.gProcyon AVRlib) + 
-  * algoritmi şi structuri ​pe care plănuiţsă le implementaţ+  * În funcția setup() se inițializează ecranul TFT, porturile de control pentru LED-uri, precum și sistemul de sunetTot aici se generează o valoare aleatorie pentru poziția inamicilorfolosind analogRead(pentru a inițializa randomSeed(). 
-  * (etapa 3surse şfuncţii implementate + 
-</note>+  * Jocul începe cu un ecran de tip intro, care explică comenzile de control: butoanele A șB mută jucătorul stânga/​dreapta,​ C trage un glonț, iar D începe jocul. 
 + 
 +  * Î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șajulJocul se oprește în cazul în care se pierd toate viețile, afișând mesajul GAME OVER. 
 + 
 +  * 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 inamic, scorul crește, iar la intervale fixe, viteza acestora se accelerează. La coliziune directă, jucătorul pierde o viață. 
 + 
 +În scopul optimizării performanței ș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 șdebouncing-ului. 
 + 
 +  * În locul funcției tone(), care este blocantă ș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 ===== ===== Rezultate Obţinute =====
Line 50: Line 63:
  
 {{:​pm:​prj2025:​avaduva:​cozmaandreirezultat2.jpeg?​300|}} {{:​pm:​prj2025:​avaduva:​cozmaandreirezultat2.jpeg?​300|}}
- 
-===== Concluzii ===== 
  
 ===== Cod sursă - Download ===== ===== Cod sursă - Download =====
Line 60: Line 71:
  
 [[https://​www.youtube.com/​watch?​v=rv_-RGzo10o|Link Demo]] [[https://​www.youtube.com/​watch?​v=rv_-RGzo10o|Link Demo]]
 +
 +===== Export to PDF =====
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2025/avaduva/andrei.cozma0903.1748177016.txt.gz · Last modified: 2025/05/25 15:43 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