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 23:26]
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 94: Line 95:
   * 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 107: Line 108:
 [[https://​drive.google.com/​file/​d/​1GEh_BmEDrNeIuTdVP92iYdb2ZT7x1Z23/​view?​usp=sharing|Demo schimbare culoare pasare [[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 =====
  
Line 114: Line 120:
 {{:​pm:​prj2022:​arosca:​flappy_bird_definitive_edition.zip|Cod Sursa}} {{:​pm:​prj2022:​arosca:​flappy_bird_definitive_edition.zip|Cod Sursa}}
  
 +{{:​pm:​prj2022:​arosca:​schema_hardware.pdf|Schema hardware PDF}}
 ===== Jurnal ===== ===== Jurnal =====
   * 4.21.2022: Adaugare pagina proiect   * 4.21.2022: Adaugare pagina proiect
Line 143: Line 150:
   * https://​github.com/​prenticedavid/​MCUFRIEND_kbv   * https://​github.com/​prenticedavid/​MCUFRIEND_kbv
   * https://​github.com/​robsoncouto/​arduino-songs   * https://​github.com/​robsoncouto/​arduino-songs
 +  * https://​www.youtube.com/​watch?​v=7ER1fbDoc20
  
 === Resurse Hardware === === Resurse Hardware ===
pm/prj2022/arosca/gabriel.oprea2111.1653683176.txt.gz · Last modified: 2022/05/27 23:26 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