This shows you the differences between two versions of the page.
pm:prj2022:arosca:gabriel.oprea2111 [2022/05/27 23:20] 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-u 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 112: | Line 118: | ||
===== Download ===== | ===== Download ===== | ||
+ | {{: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 === |