Differences

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

Link to this comparison view

pm:prj2022:arosca:gabriel.oprea2111 [2022/05/27 18:21]
gabriel.oprea2111
pm:prj2022:arosca:gabriel.oprea2111 [2022/05/27 23:57] (current)
gabriel.oprea2111 [Descriere generală]
Line 18: Line 18:
   * Jocul va fi conceput prin desenarea elementelor pe ecran, considerand o executie a functiei de loop drept un frame. Ecranul nu suporta o rata de refresh prea mare; motiv pentru care animatiile prea complexe au fost imposibil de realizat. Cu toate acestea, am facut anumite optimizari pentru a putea reda jocul cu o viteza buna si cu un aspect grafic placut.   * Jocul va fi conceput prin desenarea elementelor pe ecran, considerand o executie a functiei de loop drept un frame. Ecranul nu suporta o rata de refresh prea mare; motiv pentru care animatiile prea complexe au fost imposibil de realizat. Cu toate acestea, am facut anumite optimizari pentru a putea reda jocul cu o viteza buna si cu un aspect grafic placut.
  
-  * Pentru a ne juca, ne folosim de touchscreen-ecranului.+  * Pentru a ne juca, ne folosim de touchscreen-ul ecranului.
  
   * Folosind un breadboard pe care jucatorul il are la indemana, acesta isi poate __customiza pasarea__ prin apasarea unui buton. De asemenea, utilizatorul poate vedea in timp real la ce nivel de dificultate a ajuns, in functie de cate LED-uri sunt aprinse. Jocul va avea __5 niveluri progresive de dificultate__.   * Folosind un breadboard pe care jucatorul il are la indemana, acesta isi poate __customiza pasarea__ prin apasarea unui buton. De asemenea, utilizatorul poate vedea in timp real la ce nivel de dificultate a ajuns, in functie de cate LED-uri sunt aprinse. Jocul va avea __5 niveluri progresive de dificultate__.
Line 49: Line 49:
   * Buzzer   * Buzzer
   * Buton colorat   * Buton colorat
 +  * Shift register 74HC595N
   * Ecran LCD 3.5 inch ILI9488, cu touchscreen   * Ecran LCD 3.5 inch ILI9488, cu touchscreen
  
Line 60: Line 61:
  
 Am utilizat **Arduino IDE**, impreuna cu librariile: Am utilizat **Arduino IDE**, impreuna cu librariile:
-  * **MCUFRIEND_kbv** si **Adafruit_GFX** pentru a reda imagini pe ecran. Libraria standard Adafruit_TFT nu era compatibila cu ecrane atat de mari, de aceeam ​am folosit o alternativa. Libraria e capabila de a desena primitive geometrice, de a umple fundalul ecranului cu o culoare si de a desena imagini bitmap serializate.+  * **MCUFRIEND_kbv** si **Adafruit_GFX** pentru a reda imagini pe ecran. Libraria standard Adafruit_TFT nu era compatibila cu ecrane atat de mari, de aceea am folosit o alternativa. Libraria e capabila de a desena primitive geometrice, de a umple fundalul ecranului cu o culoare si de a desena imagini bitmap serializate.
   * **TouchScreen.h** pentru a implementa functionalitatea de touchscreen. Aceasta este capabila sa detecteze pozitia si presiunea aplicata pe orice punct de pe ecran. Pentru a interactiona cu aceasta librarie, am creat o functie isPressed() care imi spune daca la momentul curent, pe ecran a fost aplicata o presiune mai mare decat un anumit threshold. ​   * **TouchScreen.h** pentru a implementa functionalitatea de touchscreen. Aceasta este capabila sa detecteze pozitia si presiunea aplicata pe orice punct de pe ecran. Pentru a interactiona cu aceasta librarie, am creat o functie isPressed() care imi spune daca la momentul curent, pe ecran a fost aplicata o presiune mai mare decat un anumit threshold. ​
 === Redarea imaginilor jocului === === Redarea imaginilor jocului ===
-  * In joc am redat environment-urile specifice mediului urban de zi sau noapte folosind mai multe obiecte: nori, soare, luna, stele, cladiri. Pentru a face acest lucru, am preluat cateva imagini .png, le-am transformat in imagini ​binari ​.bmp, le-am serializat si am adaugat octetii specifici in cod.+  * In joc am redat environment-urile specifice mediului urban de zi sau noapte folosind mai multe obiecte: nori, soare, luna, stele, cladiri. Pentru a face acest lucru, am preluat cateva imagini .png, le-am transformat in imagini ​binare ​.bmp, le-am serializat si am adaugat octetii specifici in cod.
   * Pasarea a fost desenata de la zero folosind primitive geometrice simple (dreptunghiuri,​ patrate, ovale).   * Pasarea a fost desenata de la zero folosind primitive geometrice simple (dreptunghiuri,​ patrate, ovale).
  
Line 78: Line 79:
 === Afisajul cu 5 LED-uri === === Afisajul cu 5 LED-uri ===
  
-Initial am conceput trecerea de la o dificultate la alta in functie de numarul de tuburi parcurse de catre pasare, insa am adaugat posibilitatea de a face aceasta trecere in functie de un timer configurat in modul CTC, ce in rutina de tratare a intreruperii va incrementa numarul de led-uri aprinse.+Initial am conceput trecerea de la o dificultate la alta in functie de numarul de tuburi parcurse de catre pasare, insa am adaugat posibilitatea de a face aceasta trecere in functie de **un timer configurat in modul CTC**, ce in rutina de tratare a intreruperii va incrementa numarul de led-uri aprinse.
  
 === Butonul de culoare === === Butonul de culoare ===
  
-Acesta va cicla printr-un set de culori, folosind o intrerupere de tip PCINT pentru a modifica aspectul pasarii in orice moment, inclusiv cand aceasta zboara.+Acesta va cicla printr-un set de culori, folosind o **intrerupere de tip PCINT** pentru a modifica aspectul pasarii in orice moment, inclusiv cand aceasta zboara.
  
 === Logica jocului === === Logica jocului ===
Line 89: Line 90:
   * Pentru a reseta starea unui joc, ma folosesc de functia initRun(), apelata la inceput sau dupa ce pasarea se ciocneste si jucatorul doreste sa reinceapa un run.   * Pentru a reseta starea unui joc, ma folosesc de functia initRun(), apelata la inceput sau dupa ce pasarea se ciocneste si jucatorul doreste sa reinceapa un run.
  
- 
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (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 ===== ===== Rezultate Obţinute =====
  
-<note tip> 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. 
-</​note>​ 
   * Trecerea printr-un tub și finalizarea fiecărui run sunt marcate de sunetele buzzerelor.   * Trecerea printr-un tub și finalizarea fiecărui run sunt marcate de sunetele buzzerelor.
   * Pasarea arata realistic, fiind putin mai complexa decat un oval cu ochi (in cazul jocului original)   * Pasarea arata realistic, fiind putin mai complexa decat un oval cu ochi (in cazul jocului original)
-  * Butonul de customizare este utilizabil oricand.+  * Butonul de customizare este utilizabil oricand ​(inceput/in timpul run-ului/​ciocnire).
   * Animatiile sunt fluide.   * Animatiile sunt fluide.
   * Sirul de leduri afișează corect dificultatea curenta.   * Sirul de leduri afișează corect dificultatea curenta.
Line 112: Line 102:
 {{:​pm:​prj2022:​arosca:​day.jpg?​300|}} {{:​pm:​prj2022:​arosca:​day.jpg?​300|}}
 {{:​pm:​prj2022:​arosca:​dark.jpg?​300|}} {{:​pm:​prj2022:​arosca:​dark.jpg?​300|}}
 +
 +[[https://​drive.google.com/​file/​d/​17wox8Bi5VP3MMO3bWHkwaDkMpUT9cCbf/​view?​usp=sharing|Demo 2 run-uri pe zi si pe noapte
 +]]
 +
 +[[https://​drive.google.com/​file/​d/​1GEh_BmEDrNeIuTdVP92iYdb2ZT7x1Z23/​view?​usp=sharing|Demo schimbare culoare pasare
 +]]
 +
 +Se poate observa cum pasarea isi schimba culoarea atat in meniul de start, cat si in timpul run-ului. De asemenea, LED-uri se aprind progresiv, iar buzzer-ul emite sunetele corespunzatoare desfasurarii jocului.
 +
 +P.S: Aceasta nu este versiunea finala din punct de vedere estetic a proiectului,​ acesta fiind ambalat intr-o cutie care sa separe logica hardware din spate (multitudinea de fire, multiplexarea),​ si sa ofere utilizatorului doar un ecran pe care sa se joace si un breadboard cu LED-uri si buton. Am filmat fara cutie pentru a se putea vedea conexiunile.
 +
 ===== Concluzii ===== ===== Concluzii =====
 +
 +A fost un proiect interesant; dar am considerat ca a fost si destul de costisitor ca timp si dificultate. Totusi, in final consider ca a fost worth it, pentru ca am inteles mult mai bine lucrul cu Arduino/​Atmega,​ in acelasi timp avand un joc in plus cu care sa imi omor timpul liber :-D .
  
 ===== Download ===== ===== Download =====
 +{{:​pm:​prj2022:​arosca:​flappy_bird_definitive_edition.zip|Cod Sursa}}
  
-<note warning>​ +{{:pm:​prj2022:​arosca:​schema_hardware.pdf|Schema hardware PDF}} 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etcUn fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+===== Jurnal ===== 
 +  * 4.21.2022: Adaugare pagina proiect
  
-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 Alin331CC -> **:pm:prj2009:cc:dumitru_alin**+  ​4.21.2022: Comandare componente 
-</​note>​+ 
 +  ​4.26.2022: Sosire componente si incepere proiect 
 + 
 +  ​4.27.2022Adaugare buton si buzzer pe breadboard, testare buzzer folosind cateva din melodiile din sectiunea Bibliografie/​Resurse 
 + 
 +  ​4.28.2022Testare ecran, desenare pasare folosind figuri geometrice 
 + 
 +  ​4.30.2022: Desenare background-uri ​(norisori, stele, copaci, cladiri) 
 + 
 +  ​5.03.2022 - 5.15.2022Implementare logica joc: animatii ale pasariituburi miscatoare, scor, functionalitate de reset, etc. 
 + 
 +  * 5.18.2022: Adaugare shift register si LED-uri pe breadboard. 
 + 
 +  ​5.25.2022Final fixesAm reparat bug-uri ce fac jocul mult mai placut. Printre acestea se includecranul este mult mai reactiv la atingere, coliziunile sunt mai bune, schimbarea dificultatii se face dupa un timer, si nu dupa numarul de tuburi traversate, jocul nu se mai blocheaza. Overall in aceasta zi am imbunatatit mult experienta de joc :-D
 + 
 +  * 5.27.2022: Documentare finala si asezare proiect in cutie pentru aspect mai placut.
  
-===== Jurnal ===== 
-4.21.2022: Adaugare pagina proiect 
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +=== Resurse Software ===
 +
 +  * http://​adafruit.github.io/​Adafruit-GFX-Library/​html/​class_adafruit___g_f_x.html
 +  * https://​github.com/​adafruit/​Adafruit_TouchScreen
 +  * https://​github.com/​prenticedavid/​MCUFRIEND_kbv
 +  * https://​github.com/​robsoncouto/​arduino-songs
 +  * https://​www.youtube.com/​watch?​v=7ER1fbDoc20
 +
 +=== Resurse Hardware ===
  
-<​note>​ +  ​https://​www.elecrow.com/​download/​ILI9488%20Data%20Sheet_100.pdf 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * https://​www.diodes.com/​assets/​Datasheets/​74HC595.pdf 
-</note>+  * Laboratoarele de PM
  
 <​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/prj2022/arosca/gabriel.oprea2111.1653664871.txt.gz · Last modified: 2022/05/27 18:21 by gabriel.oprea2111
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