This shows you the differences between two versions of the page.
pm:prj2023:amocanu:gaming_console_with_one_game [2023/05/07 17:48] mihnea.virlan created |
pm:prj2023:amocanu:gaming_console_with_one_game [2023/05/30 06:15] (current) mihnea.virlan |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Consolă de gaming cu un joc ====== | ====== Consolă de gaming cu un joc ====== | ||
+ | * Nume: VÎRLAN Mihnea-Alexandru | ||
+ | * Grupa: 331CB | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | <note tip> | + | Proiectul constă în asigurarea mediului pentru a juca un joc relativ simplu: se dau 3 căni și o bilă. La întâmplare, o cană acoperă mingiuța și se amestecă toate cănile. Prin amestecare, se înțelege schimbarea pozițiilor tuturor cănilor. |
- | Prezentarea pe scurt a proiectului vostru: | + | După un timp, se oprește shuffle-ul și jucătorul trebuie să aleagă cana care acoperă |
- | + | ||
- | Proiectul constă în asigurarea mediului pentru a juca un joc relativ simplu: se dau 3 pahare și o bilă. La întâmplare, un | + | |
- | pahar acoperă mingiuța și se amestecă toate paharele. Prin amestecare, se înțelege schimbarea pozițiilor tuturor paharelor. | + | |
- | După un timp relativ mic (aproximativ 10 secunde), se oprește shuffle-ul și jucătorul trebuie să aleagă paharul care acoperă | + | |
bila. Ideea de la care am pornit pleacă de la faptul că la cursul elemente de grafică pe calculator am căpătat un insight | bila. Ideea de la care am pornit pleacă de la faptul că la cursul elemente de grafică pe calculator am căpătat un insight | ||
- | legat de munca din spatele unui joc și pentru că îmi este mai convenabil un joc decât să lucrez cu senzori. | + | legat de munca din spatele unui joc și pentru că îmi este mai convenabil să codez un joc simplu decât să lucrez cu senzori. |
- | Consider că proiectul va fi util, deoarece voi învăța cum să îmbin noțiuni din câteva laboaratoare: timere, întreruperi, I2C. | + | Consider că proiectul va fi util, deoarece voi învăța cum să îmbin noțiuni din câteva laboaratoare: timere, întreruperi, I2C, comunicarea |
- | </note> | + | cu interfața serială. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 18: | Line 16: | ||
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | ||
+ | |||
</note> | </note> | ||
+ | {{:pm:prj2023:amocanu:diagrama_joc_arduino_virlan_mihnea_alexandru_1.jpg?300|}} | ||
+ | Utilizatorul are la dispoziție 3 butoane: unul pentru a muta cursorul la stânga, altul pentru mutare cursor la dreapta și unul pentru | ||
+ | a alege opțiunea (în cazul nostru paharul) pe care utilizatorul o consideră corectă. La oricare dintre cele 3 apăsări, prin intermediul plăcii | ||
+ | Arduino, modificarea va fi vizibilă pe ecranul LCD. <del>Pentru o alegere corectă, va fi difuzat suplimentar un sunet (posibil că va fi ori 'Felicitări', ori 'Bravo'), iar pentru o alegere incorectă se va auzi 'Mai încearcă'</del> (UPDATE: Am renunțat la folosirea buzzer-ului). | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 29: | Line 32: | ||
* rezultatele simulării | * rezultatele simulării | ||
</note> | </note> | ||
+ | Lista de piese achiziționate până la momentul actual: | ||
+ | -GroundStudio Jade Uno+ | ||
+ | -Display OLED 0.96" I2C Albastru JMD0.96D-1 | ||
+ | -<del>Cabluri SH-4P I2C 3V3 compatibil QWIIC/STEMMA - Lungime : 50mm </del> | ||
+ | -Breadboard | ||
+ | -Fire Dupont tată-tată <del> și mamă-tată</del> | ||
+ | -Butoane Push Button | ||
+ | -<del>Buzzer</del> | ||
+ | -Rezistențe | ||
+ | {{:pm:prj2023:amocanu:poza_alcatuire_hardware_virlan_mihnea-alexandru.v1.jpg?700|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
Line 35: | Line 47: | ||
<note tip> | <note tip> | ||
Descrierea codului aplicaţiei (firmware): | Descrierea codului aplicaţiei (firmware): | ||
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * Am scris codul în ARDUINO IDE, versiunea 2.1.0 |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * Pe post de librării ADAFRUIT_GFX.h și ADAFRUIT_SSD1306.h |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
</note> | </note> | ||
+ | Programul este împărțit în mai multe faze: | ||
+ | - folosind interfața serială primim ca parametru viteza cu care cănile se mișcă pe orizontală. Motivul pentru care am recurs la acest lucru se datorează dorinței ca jucătorii să-și poată încerca reflexele, variind viteza jocului. | ||
+ | - se alege aleator cana care va acoperi bila. | ||
+ | - apoi, folosind permutări, amestecăm cănile, ținându-se cont de viteza primită. | ||
+ | - După 4 runde de amestec, acestea încetează, iar jucătorul alege cana în care se află bila | ||
+ | - Dacă nimerește răspunsul corect, se dezvăluie bila și se ridică cana, altfel mai încearcă | ||
+ | Pentru a alege cana, se utilizează 3 butoane: două pentru alegere stânga dreapta, iar unul de mijloc pentru confirmare. Pentru asta, | ||
+ | am folosit întreruperi hardware. | ||
+ | |||
+ | În timpul alegerii paharului, la interval de 2 secunde se afișează mesajul ”Succes” pentru a încuraja astfel jucătorul. | ||
+ | Observația fundamentală este: se poate da oricând prin interfața serială, de la tastaură o viteză, dar aceasta își va face efectul după | ||
+ | ce a fost găsită bila. Dacă la finalul găsirii bilei nu s-a dat vreun input, viteza va deveni cea default. | ||
+ | |||
+ | |||
+ | Ca o notă importantă: pentru cod am avut nevoie de imaginea unei căni proprii, imagine pe care am transformat-o în cod | ||
+ | folosind un site ce va fi menționat la resurse/bibliografie. | ||
+ | |||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Jocul funcționează foarte bine. Fiindcă nu am folosit debounce, e posibil ca o apăsare mai lungă să arunce cursorul din ecran. |
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Era ok dacă aveam curajul să fac un proiect poate chiar mai complex, dar frica de electronică m-a restrâns. Pe lângă asta, am | ||
+ | profitat de faptul că am căpătat experiență în scrierea unui joculeț în C. | ||
===== Download ===== | ===== Download ===== | ||
Line 57: | Line 85: | ||
</note> | </note> | ||
+ | {{:pm:prj2023:amocanu:proiectpm_virlan_mihnea-alexandru.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 62: | Line 91: | ||
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
</note> | </note> | ||
+ | *26 aprilie 2023 sosire prim lot piese (printre ele, LCD-ul, placa Arduino și cablurile I2C) | ||
+ | *5 mai 2023 al doilea lot de piese (celelalte piese menționate) | ||
+ | *22 mai 2023 finalizare hardware | ||
+ | *29-30 mai 2023 finalizare proiect | ||
+ | *Din cauza unor conflicte software ce nu au mai putut fi investigate la timp, am decis să nu mai folosesc buzzer | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 67: | Line 101: | ||
<note> | <note> | ||
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
- | </note> | + | https://app.diagrams.net/ pentru ajutorul la schema bloc |
+ | https://ardushop.ro/ro/ pentru piese | ||
+ | |||
+ | https://github.com/adafruit/Adafruit_SSD1306 și https://github.com/adafruit/Adafruit_SSD1306 pentru interacțiunea cu LCD-ul OLED | ||
+ | |||
+ | https://randomnerdtutorials.com/guide-for-oled-display-with-arduino/ m-a ajutat pentru a învăța cum să interacționez cu LCD-ul | ||
+ | |||
+ | https://javl.github.io/image2cpp/ pentru codificare de imagini | ||
+ | |||
+ | </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> | ||