Differences

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

Link to this comparison view

pm:prj2023:iotelea:rhythm-game [2023/05/05 14:15]
ana_maria.varban
pm:prj2023:iotelea:rhythm-game [2023/05/29 16:15] (current)
ana_maria.varban [Download]
Line 1: Line 1:
  
 ====== Rhythm Game ====== ====== Rhythm Game ======
 +  * Nume: Vârban Ana-Maria
 +  * Grupa: 336CB
 ===== Introducere ===== ===== Introducere =====
  
Line 33: Line 35:
  
 {{ :​pm:​prj2023:​amvarban:​pm_hardware.png?​705x438 |}} {{ :​pm:​prj2023:​amvarban:​pm_hardware.png?​705x438 |}}
 +
 +==== Implementarea Hardware ====
 +
 +{{ :​pm:​prj2023:​amvarban:​pm_hardware.jpg?​600x450 |}}
 +
 +  * Dupa cum se poate observa, am asezat cele **4 butoane ce vor fi folosite pentru joc** in stanga breadboard-ului,​ iar cele **2 butoane de control** in partea dreapta. Butoanele sunt conectate alaturi de cate un rezistor de 10K ce actioneaza ca rezistenta de pull down. Cele 6 butoane sunt conectate la pinii digitali de pe placuta **Arduino Uno**. **Ecranul LCD** este asezat pe breadboard alaturi de rezistori de 10K, conform indicatiilor distribuitorului. Aceste rezistente previn arderea display-ului. Pinii folositi pentru LCD sunt pinii digitali 8, 9, 11-13. **Buzzerul** este conectat la unul dintre pinii digitali PWM ai placutei Arduino, acesta nefiind inseriat cu un rezistor pentru un sunet mai puternic.
  
 ===== Software Design ===== ===== Software Design =====
  
  
-<note tip> +Deoarece notele ce vor aparea pe ecran sunt singurele elemente ce se vor misca, acestea sunt definite de clasa **NoteCircle**. Aceasta pastreaza atribute precum pozitia curenta a notei, pozitia precedenta a notei, daca nota este sau nu pe ecran, daca nota este sau nu un //blank//, spatiul in care se afla sau dimensiunea si metode precum //getteri// si //​setteri//,​ respectiv o metoda de update a pozitiei. Pentru afisarea acestora pe ecran, am declarat global un array (**circles**) de 30 de elemente, dintre care 15 vor fi //blank//. Am ales sa folosesc ​note //blank// (note ce nu vor fi afisate) pentru a ma asigura ca notele nu sunt ingramadite pe ecran. 
-Descrierea codului aplicaţiei ​(firmware): + 
-  mediu de dezvoltare ​(if any) (e.gAVR StudioCodeVisionAVR+Melodia ce va fi redata la apasarea notelor este un fragment din Korobeiniki ​(aka The Tetris songsi este reprezentata printr-un array declarat global. ​ 
-  librării şi surse 3rd-party (e.gProcyon AVRlib) + 
-  ​algoritmi şi structuri pe care plănuiţi să le implementaţi +In cadrul functiei ​**setup()**, pornesc interfata seriala pentru a putea comunica cu display-ul, setez pinii digitali aferenti butoanelor si buzzer-ului si asignez toate notele de la indecsi impari in array-ul **circles** ca fiind note //​blank//​. 
-  * (etapa 3surse şi funcţii implementate + 
-</note>+In cadrul functiei **loop()**, se determina starea joculuiJocul se poate afla la un moment de timp intr-una dintre 3 stari predefinite:​ MENU, PLAY sau SCORE 
 + 
 +In starea MENUse afiseaza pe ecran titlul jocului (ARDUINO RHYTHM GAMEsi un mesaj indemnand jucatorul sa apese butonul (asociat firului) verde pentru a incepe jocul. Afisarea acestor elemente este facuta cu ajutorul functiei **displayMenu()**. 
 + 
 +Odata apasat butonul de start, jocul se va afla in starea PLAY iar pe ecran vor aparea cele 4 spatii in care vor aparea notele. Notele vor ajunge la baza ecranului, in zona delimitata de o linie verde si una rosie, unde, daca jucatorul apasa butonul corespunzator,​ scorul va creste iar nota aferenta din cantec va fi redata sonor. Pentru verificarea localizarii corecte a notei se va verifica doar coordonata //y//, deoarece odata afisata, o nota nu isi va modifica coordonata //x// cat timp este pe ecran. Pentru verificarea apasarii butoanelor, se citesc valori de pe **pinii digitali** aferenti acestora. Pentru redarea notei se va mentine indexul curent din array-ul de note, acesta fiind pasat functiei **playSong(int note)**, care va reda sunetul corespunzatorJocul se termina cand toate notele din cantec au fost redatePentru afisarea spatiului de joc ma folosesc de functia **drawPlayField()**, iar pentru logica din timpul jocului, de functia **play()** 
 + 
 +Odata terminat cantecul, jocul va trece in starea SCORE, unde se va afisa pe ecran scorul obtinut. De aici, jucatorul poate apasa fie butonul verde, pentru a reveni la meniul de start, fie butonul rosu, pentru a juca din nou. De afisarea acestora se ocupa functia ​**displayFinalScore()**. 
 + 
 +Scrierea si incarcarea codului pe placuta Arduino au fost facute folosind ​//Arduino IDE//. De asemenea, am folosit bibliotecile //SPI.h//, pentru comunicarea cu display-ul si //​Adafruit_GFX.h//,​ respectiv //​Adafruit_ILI9341.h//​ pentru afisarea elementelor grafice pe display. Codul aferent redarii sunetelor este preluat din proiectul //Arduino Songs//, de care ne-am folosit si la laboratorul 3.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +Prin cele de mai sus am obtinut un joculet minimalist de ritm. Din pacate, limitarile componentelor ​au dus la un gameplay relativ lent
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+Mai jos se gaseste link-ul catre un demo. 
-</note>+ 
 +{{ :​pm:​prj2023:​amvarban:​start.jpg?​180x240 |}} {{ :​pm:​prj2023:​amvarban:​score_0.jpg?​180x240 |}} {{ :​pm:​prj2023:​amvarban:​score_25.jpg?​180x240 |}} {{ :​pm:​prj2023:​amvarban:​score_fin.jpg?​180x240 |}} 
 + 
 +[[https://​drive.google.com/​file/​d/​16Sq2WviRpvwQBLiT2VoP_rqPYwAk6Njz/​view?​usp=drive_link|Demo Rhythm Game]] 
 + 
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Pe masura ce am implementat diversele functionalitati,​ m-am lovit de limitarile componentelor,​ precum viteza de transfer a datelor de la placuta la ecranul LCD, afisarea pe ecran a notelor si reimprospatarea scorului, ce se face foarte des, motiv pentru care acesta apare sa clipeasca. Acestea au dus la un joc cu o complexitate foarte redusa si la un gameplay relativ lent.
 +
 +In ciuda aspectelor mai neplacute, a fost foarte imbucurator sa vad rezultatele pe ecran. Creerea de la 0 a ceva tangibil si functional a fost o experienta unica, de care nu am mai avut parte pana acum. Desi proiectul este unul rudimentar, sunt foarte mandra de el.
 ===== Download ===== ===== Download =====
  
-<note warning> 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). 
  
-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 Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. 
-</​note>​ 
  
 +{{:​pm:​prj2023:​iotelea:​rhythm_game.zip| Download Rhythm Game}}
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +  * 25 aprilie 2023 : Am ales tema si am creat pagina wiki pentru proiect 
-Puteți avea și secțiune ​de jurnal în care să poată urmări asistentul ​de proiect progresul proiectului. +  * 1 mai 2023: Am completat pagina wiki cu descriere a proiectului si un outline al design-ului hardware 
-</​note>​+  * 2 mai 2023: Am comandat piesele necesare 
 +  * 9 mai 2023: Am lipit pinii display-ului la laborator 
 +  * 13 mai 2023: Am asamblat componentele si am finalizat design-ul hardware, am testat functionalitatile ​de baza ale componentelor 
 +  * 24 mai 2023: Am implementat meniul ​de start, afisarea spatiului de joc si afisarea scorului 
 +  * 26 mai 2023: Am implementat caderea notelor, incrementarea scorului si redarea notei la apasarea corecta a butoanelor 
 +  * 30 mai 2023: PM Fair!
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +  * [[https://​ardushop.ro/​ro/​index.php?​controller=attachment&​id_attachment=144|Cod exemplu display LCD]]
 +  * [[https://​github.com/​adafruit/​Adafruit_ILI9341|Biblioteca display LCD]]
 +  * [[https://​github.com/​robsoncouto/​arduino-songs|Cod Arduino Songs]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2023|PM Lab 2]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023|PM Lab 3]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab5-2023|PM Lab 5]]
  
-<​note>​ 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
  
 <​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/prj2023/iotelea/rhythm-game.1683285334.txt.gz · Last modified: 2023/05/05 14:15 by ana_maria.varban
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