Differences

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

Link to this comparison view

pm:prj2025:aluca:mihai_catalin.stan [2025/05/25 00:21]
mihai_catalin.stan [Introducere]
pm:prj2025:aluca:mihai_catalin.stan [2025/05/25 22:32] (current)
mihai_catalin.stan [Software Design]
Line 73: Line 73:
 ===== Software Design ===== ===== Software Design =====
  
 +Stadiu milestone software:
 +  * Un joc inspirat classic, retro, inspirat dupa Chicken Invaders, a fost implementat
 +  * Interactiunea utilizator-giroscop-joc a fost implementata,​ prin interfata I2C
 +  * Interactiunea utilizator-buton-joc a fost implementata prin pini de GPIO cu intreruperi
 +  * Interactiunea joc-modul de ceas a fost implementata prin I2C si intreruperi al timerului extern
 +  * Interactiunea joc-display este facuta prin interfata SPI
  
-<note tip> +Biblioteci folosite
-Descrierea codului aplicaţiei (firmware)+  * Display - AdafruitGFX.h, Adafruit_ST7735.hSPI.h 
-  * mediu de dezvoltare (if any) (e.gAVR StudioCodeVisionAVR) +  * Giroscop ​MPU9250_asukiaaa.h ​(biblioteca custom), Wire.h (biblioteca standard pentru I2C
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib+  * Modul de ceas - I2C_RTC.h
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
 +Am ales sa folosesc bibliotecile de mai sus intrucat sunt foarte folosite in utilizarea componentelor pe care le-am cumparat, cu multe forum-uri deschise pentru eventualele probleme si exemple de utilizare a acestora.
 +
 +Elementul de noutate al proiectului este dat de interactiunea intre joc si utilizator prin intermediul giroscopului,​ iar calibrarea acestuia a fost facuta prin citirea valorii analogice a giroscopului si trecerea vitezei unghiulare intr-un unghi de inclinatie in jurul axelor Oz (Roll) si Ox (Pitch). Cu toate acestea la momentul curent nu folosesc si unghiul de Pitch.
 +
 +La momentul curent nu exista optimizari, dar in varianta finala doresc sa folosesc al doilea buton pentru a pune consola in deep sleep, respectiv a o trezi din deep sleep, si sa o conectez la baterii.
 +
 +Utilizarea functionalitatilor din laborator a fost in special intalnit la transmiterea de date prin I2C (Wire.begin/​beginTransmission/​endTransmission/​requestFrom),​ prin SPI (SPI.begin/​beginTransaction/​endTransaction/​setClockDivider),​ si la utilizarea intreruperilor (setarea unei intreruperi pe un anumit GPIO cu attachInterrupt(pin,​ functia_isr,​ frontul/​valorea pe care se activeaza), si scrierea de isr-uri prin atasarea antetului IRAM_ATTR). De asemenea, am folosit minimal si cunostinte din laborator si datasheet-ul RTC-ului pentru setarea unui Timer.
 +
 +In cod am folosit structuri de date pentru obstacole si gloante, pentru a le contoriza starea de existenta si coordonatele. Ca functii avem doua pe care le-am trecut in memoria interna a uC-ului pentru intreruperi:​ fire_bullet() - pentru a trage un glont si rewards() - pentru a primit un reward in game la scurgerea timer-ului extern. Alte functii implementate de mine sunt: start_screen(),​ game_over_screen(),​ reset(), spawn_asteroids(). Functii folosite, dar neimplementate de mine sunt cele din biblioteca display-ului,​ pentru desenarea primitivelor geometrice, folosite pentru gloante (pixel), asteroizi (cercuri) si nava (triunghi). Logica de mutarea a navei, asteroizilor,​ gloantelor si de coliziune este facuta in functia loop(), pentru a nu incarca stiva cu apeluri inutile din moment ce complexitatea ciclomatica si cognitiva a codului este redusa.
 +
 +DEMO:
 +
 +<​html>​
 +  <iframe width="​560"​ height="​315"​
 +     ​src="​https://​www.youtube.com/​embed/​rlgCxp-0uKw?​si=nVdr1mpfgMVzz8b_"​
 +     ​title="​YouTube video player"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share"​ referrerpolicy="​strict-origin-when-cross-origin"​ allowfullscreen>​
 +  </​iframe>​
 +</​html>​
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
pm/prj2025/aluca/mihai_catalin.stan.1748121690.txt.gz · Last modified: 2025/05/25 00:21 by mihai_catalin.stan
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