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:26]
andrei.cozma0903 [Hardware Design]
pm:prj2025:avaduva:andrei.cozma0903 [2025/05/25 16:10] (current)
andrei.cozma0903
Line 4: 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.   * 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 16: Line 18:
   * [[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]]   * [[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]]
   * [[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]]   * [[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]]
-  * [[https://​www.emag.ro/​breadboard-400-puncte-ai059-s69/​pd/​DRJ66JBBM/?​cmpid=146414&​utm_source=google&​utm_medium=cpc&​utm_campaign=(RO:​Whoop!)_3P-Y_%3e_Jucarii_hobby&​utm_content=79559830074&​gad_source=1&​gad_campaignid=2078923891&​gbraid=0AAAAACvmxQg1SSKlOzlqO284tWg2cCZWV&​gclid=CjwKCAjwravBBhBjEiwAIr30VGoN3IRWvYmHMoxZSSClU23qSUBKPyL30F_zYElexUlRhgYAGRnnTRoC7YQQAvD_BwE|Breadboard]]+  * Breadboard 
 +  * Fire
   * [[https://​cleste.ro/​ecran-lcd-1-8-spi.html|Ecran LCD 1.8" SPI]]   * [[https://​cleste.ro/​ecran-lcd-1-8-spi.html|Ecran LCD 1.8" SPI]]
   * [[https://​www.emag.ro/​tastatura-matriciala-4x4-ai183-s248/​pd/​D9SFNYMBM/?​ref=cart_item|Keypad]]   * [[https://​www.emag.ro/​tastatura-matriciala-4x4-ai183-s248/​pd/​D9SFNYMBM/?​ref=cart_item|Keypad]]
-  * Fire 
   * Rezistențe   * Rezistențe
   * 2 LED-uri RGB   * 2 LED-uri RGB
Line 25: Line 27:
 Schema electrica: Schema electrica:
  
-{{:​pm:​prj2025:​avaduva:​cozmaandreischema_electrica.pn?600|}}+{{:​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 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 43: Line 63:
  
 {{:​pm:​prj2025:​avaduva:​cozmaandreirezultat2.jpeg?​300|}} {{:​pm:​prj2025:​avaduva:​cozmaandreirezultat2.jpeg?​300|}}
- 
-===== Concluzii ===== 
  
 ===== Cod sursă - Download ===== ===== Cod sursă - Download =====
Line 52: Line 70:
 ===== Demo ===== ===== Demo =====
  
-[[|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.1748176011.txt.gz · Last modified: 2025/05/25 15:26 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