This shows you the differences between two versions of the page.
pm:prj2021:avaduva:2048sounds [2021/06/01 21:44] mihai_daniel.radu99 |
pm:prj2021:avaduva:2048sounds [2021/06/02 10:15] (current) mihai_daniel.radu99 |
||
---|---|---|---|
Line 8: | Line 8: | ||
===== Descriere generala ===== | ===== Descriere generala ===== | ||
+ | |||
Scopul jocului 2048 este ca, prin translatarea unor patrate numerotate cu multipli de 2 si situate intr-o matrice 4x4, sa se obtina un patrat care sa contina numarul 2048, fara ca toata matricea sa fie in totalitate ocupata si nicio miscare disponibila ramasa.\\ \\ | Scopul jocului 2048 este ca, prin translatarea unor patrate numerotate cu multipli de 2 si situate intr-o matrice 4x4, sa se obtina un patrat care sa contina numarul 2048, fara ca toata matricea sa fie in totalitate ocupata si nicio miscare disponibila ramasa.\\ \\ | ||
Input-ul jucatorului va fi captat folosind 4 butoane, care vor reprezenta directiile in care se vor misca patratele in matrice: stanga, sus, jos si dreapta.\\ \\ | Input-ul jucatorului va fi captat folosind 4 butoane, care vor reprezenta directiile in care se vor misca patratele in matrice: stanga, sus, jos si dreapta.\\ \\ | ||
Line 14: | Line 15: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | |||
+ | {{ :pm:prj2021:avaduva:schema_electrica_2048sounds.jpeg?800 |Schema Electrica 2048Sounds}} | ||
+ | |||
Lista componentelor folosite pentru proiect: | Lista componentelor folosite pentru proiect: | ||
Line 21: | Line 25: | ||
| Breadboard 830 puncte MB-102 | 2 | | | Breadboard 830 puncte MB-102 | 2 | | ||
| 65 x fire jumper | 1 | | | 65 x fire jumper | 1 | | ||
- | | Buton MIC-Push Button-trough hole- Culoare :Negru | 4 | | + | | Buton MIC-Push Button-trough hole Negru | 4 | |
| Rezistor 1/4W - Valoare rezistenta : 10K | 4 | | | Rezistor 1/4W - Valoare rezistenta : 10K | 4 | | ||
- | | Rezistor 1/4W - Valoare rezistenta : 200 | 1 | | + | | Rezistor 1/4W - Valoare rezistenta : 220 | 1 | |
- | | Display LCD 128*64 pixeli 5V iluminat-Culoare:Albastru | 1 | | + | | Display LCD 128*64 pixeli 5V iluminat Albastru | 1 | |
| Modul Buzzer - Tip : Pasiv | 1 | | | Modul Buzzer - Tip : Pasiv | 1 | | ||
- | | Fire Dupont mama-tata 20cm | 10 | | + | | Fire Dupont mama-tata 20cm | 6 | |
| Fire Dupont tata-tata 20cm | 10 | | | Fire Dupont tata-tata 20cm | 10 | | ||
\\ | \\ | ||
Line 34: | Line 38: | ||
Initial, am comandat 3 buzzere: 1 buzzer simplu activ, 1 buzzer simplu pasiv si 1 modul de buzzer pasiv. Dupa testarea acestora, am decis sa folosesc modulul de buzzer pasiv, avand cel mai bun sunet si fiind cel mai facil de folosit. | Initial, am comandat 3 buzzere: 1 buzzer simplu activ, 1 buzzer simplu pasiv si 1 modul de buzzer pasiv. Dupa testarea acestora, am decis sa folosesc modulul de buzzer pasiv, avand cel mai bun sunet si fiind cel mai facil de folosit. | ||
- | <note tip>Modulul buzzer pasiv functiona anormal sau chiar prost, fiind conectat direct la 5V. Dupa ce am adaugat o rezistenta de 200 ohmi, modulul a functionat perfect.</note> | + | <note tip>Modulul buzzer pasiv functiona anormal sau chiar prost, fiind conectat direct la 5V. Dupa ce am adaugat o rezistenta de 220 ohmi, modulul a functionat perfect.</note> |
\\ | \\ | ||
Am ales sa folosesc 2 breadboard-uri MB-102 pentru integritatea fiecarei componente hardware si pentru a avea mai mult spatiu la dispozitie pentru a actiona cele 4 butoane. Pe primul breadboard am legat display-ul si modulul buzzer-ului pasiv, iar pe cel de-al doilea breadboard am pus in centru butoanele care vor actiona, in aceasta ordine, miscarile stanga, sus, jos si dreapta (de la stanga la dreapta pe breadboard). | Am ales sa folosesc 2 breadboard-uri MB-102 pentru integritatea fiecarei componente hardware si pentru a avea mai mult spatiu la dispozitie pentru a actiona cele 4 butoane. Pe primul breadboard am legat display-ul si modulul buzzer-ului pasiv, iar pe cel de-al doilea breadboard am pus in centru butoanele care vor actiona, in aceasta ordine, miscarile stanga, sus, jos si dreapta (de la stanga la dreapta pe breadboard). | ||
\\ | \\ | ||
+ | {{ :pm:prj2021:avaduva:proiect_pm.jpeg?600 | Design Hardware 2048Sounds}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Diagrama de flow: | ||
+ | |||
+ | {{ :pm:prj2021:avaduva:2048sounds_flow_diagram.png?700 |2048Sounds Flow Diagram}} | ||
+ | |||
+ | Pentru a scrie cod cat mai curat si lizibil, am impartit in 3 codul: partea de Arduino si setup-ul necesar, mecanicile si logica de joc 2048 si fisierul cu efectele sonore. | ||
+ | |||
+ | Am inceput design-ul software prin a seta toti pinii folositi si prin a apela constructorul necesar pentru configuratia seriala prin SPI a display-ului 128x64 ST7920. | ||
+ | Folosind biblioteca u8g2 si manualul de referinte si resurse din aceasta, am desenat fiecare ecran din cadrul jocului: ecranul de "Hello & Welcome!", ecranul de joc cu matricea si numerele din aceasta, ecranul de "Game Won" si ecranul de "Game Lost". | ||
+ | <note tip>Implementarea ecranelor de vizualizare contine foarte putine valori hardcodate sau specifice doar display-ului sau componentelor pe care le-am utilizat eu, deci am respectat o norma de "clean code".</note> | ||
+ | |||
+ | Pentru a capta input-ul jucatorului, verific intotdeauna daca a existat vreo schimbare in starile butoanelor(apasat/neapasat), iar daca a existat, fac debouncing pentru a ma asigura ca este o miscare adevarata din partea jucatorului si nu o fluctuatie de curent sau orice altceva ce ar putea schimba starile butoanelor. | ||
+ | |||
+ | In ceea ce priveste jocul de 2048, in matricea de joc pastrez valorile puteri ale lui 2, deci valorile posibile in cadrul jocului sunt cuprinse intre 0 si 11, iar transformarea este efectuata la vizualizarea ecranelor, nefiind importanta pentru logica jocului decat exponentul bazei 2. Prin intermediul mai multor functii si flag-uri, verific daca jocul este inceput, castigat(exista valoarea 2048 in matrice) sau pierdut(nu mai exista miscari posibile valide in matrice), iar in functie de aceastea decid ce ecran afisez sau ce efecte sonore sunt activate. | ||
+ | La apasarea unui buton, verific daca exista miscari valide in directia impusa de buton, iar daca exista o efectuez si adaug un nou numar in matrice. | ||
+ | |||
+ | Efectele sonore joaca un rol important in jocul meu si de aceea am construit mai multe melodii si sunete care se potrivesc foarte bine cu jocul. Theme song-ul care canta pe fundal in ecranul de "Hello & Welcome!" este partea de inceput din "The Godfather", modificata de mine pentru a complimenta atmosfera in jocul de 2048. La apasarea butoanelor se aude un sunet inspirat din jocurile retro arcade, iar la ecranele de "Game Won" si "Game Lost" sunt redate sunete din aceeasi sfera retro potrivite pentru castigul sau pierderea jocului. | ||
+ | |||
+ | La final, este afisat scorul obtinut in urma jocului, iar la apasarea oricarui buton dupa afisarea ecranelor de castigare/pierdere, jucatorul este trimis inapoi la ecranul de inceput "Hello & Welcome!". | ||
===== Rezultate obtinute ===== | ===== Rezultate obtinute ===== | ||
+ | Ecran "Hello & Welcome!": | ||
+ | {{ :pm:prj2021:avaduva:2048sounds_hello.jpeg?500 |}} | ||
+ | Ecran matricea de joc: | ||
+ | {{ :pm:prj2021:avaduva:2048sounds_matrix.jpeg?500 |}} | ||
- | ===== Concluzii ===== | + | Ecran "Game Won!": |
+ | {{ :pm:prj2021:avaduva:2048sounds_gamewon.jpeg?500 |}} | ||
+ | Ecran "Game Lost!": | ||
+ | {{ :pm:prj2021:avaduva:2048sounds_gamelost.jpeg?500 |}} | ||
- | ===== Download ===== | + | <note important>[[https://www.youtube.com/watch?v=JoHIpk7h1nw&t=4s|Demo 2048Sounds Youtube]]</note> |
+ | ===== Concluzii ===== | ||
+ | Consider ca a fost unul dintre cele mai interesante proiecte din facultate, nu doar datorita oportunitatii de a cunoaste si a intelege hardware-ul, dar si datorita faptului ca am reusit sa creez ceva de la 0 si sa mearga impecabil! | ||
+ | |||
+ | ===== Download ===== | ||
+ | {{:pm:prj2021:avaduva:332cc_radu_mihai-daniel_2048sounds.zip|Download Cod 2048Sounds}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 65: | Line 100: | ||
===== Bibliografie si Resurse ===== | ===== Bibliografie si Resurse ===== | ||
Componente: | Componente: | ||
- | * Display grafic 128x64 ST7920: https://ardushop.ro/ro/home/129-display-lcd-12864-pixeli-5v-iluminat.html?search_query=display+sy7920&results=85 | + | * [[https://ardushop.ro/ro/home/129-display-lcd-12864-pixeli-5v-iluminat.html?search_query=display+sy7920&results=85|Display grafic 128x64 ST7920]] |
- | * Breadboard MB-102: https://ardushop.ro/ro/electronica/33-breadboard-830.html | + | * [[https://ardushop.ro/ro/electronica/33-breadboard-830.html|Breadboard MB-102]] |
- | * Placa dezvoltare Arduino UNO DIP: https://ardushop.ro/ro/electronica/286-placa-de-dezvoltare-uno-compatibila-arduino-dip-cablu.html?search_query=placa+arduino+uno+dip&results=379 | + | * [[https://ardushop.ro/ro/electronica/286-placa-de-dezvoltare-uno-compatibila-arduino-dip-cablu.html?search_query=placa+arduino+uno+dip&results=379|Placa dezvoltare Arduino UNO DIP]] |
- | * Modul buzzer pasiv: https://ardushop.ro/ro/home/89-modul-buzzer.html?search_query=modul+buzzer+pasiv&results=371#/63-tip-pasiv | + | * [[https://ardushop.ro/ro/home/89-modul-buzzer.html?search_query=modul+buzzer+pasiv&results=371#/63-tip-pasiv|Modul buzzer pasiv]] |
Resurse: | Resurse: | ||
- | * Biblioteca u8g2 folosita pt ST7920: https://github.com/olikraus/u8g2/wiki/u8g2reference | + | * [[https://github.com/olikraus/u8g2/wiki/u8g2reference|Biblioteca u8g2 folosita pt ST7920]] |
- | * Tutorial de folosire display: https://www.youtube.com/watch?v=GsrugNJ2JXU&ab_channel=educ8s.tv | + | * [[https://www.youtube.com/watch?v=GsrugNJ2JXU&ab_channel=educ8s.tv|Tutorial de folosire display]] |
- | * Partitura theme song The Godfather: https://musescore.com/user/35463/scores/55160 | + | * [[https://www.arduino.cc/en/Tutorial/BuiltInExamples/Debounce|Exemplu util debounce]] |
- | * Exemplu util debounce: https://www.arduino.cc/en/Tutorial/BuiltInExamples/Debounce | + | * [[https://www.youtube.com/watch?v=uzxw1yl1s_M|Tutorial util soldering]] |
- | * Tutorial util soldering: https://www.youtube.com/watch?v=uzxw1yl1s_M | + | * [[https://musescore.com/user/35463/scores/55160|Partitura theme song The Godfather]] |
+ | * [[https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody|Fisier note muzicale buzzer]] | ||
+ | * {{:pm:prj2021:avaduva:2048_sounds.pdf|Fisier PDF 2048Sounds}} | ||