Consolă de gaming cu un joc

  • Nume: VÎRLAN Mihnea-Alexandru
  • Grupa: 331CB

Introducere

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. După un timp, se oprește shuffle-ul și jucătorul trebuie să aleagă cana 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 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, comunicarea cu interfața serială.

Descriere generală

O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.

Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html

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. 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ă' (UPDATE: Am renunțat la folosirea buzzer-ului).

Hardware Design

Aici puneţi tot ce ţine de hardware design:

Lista de piese achiziționate până la momentul actual:

  1. GroundStudio Jade Uno+
  2. Display OLED 0.96” I2C Albastru JMD0.96D-1
  3. Cabluri SH-4P I2C 3V3 compatibil QWIIC/STEMMA - Lungime : 50mm
  4. Breadboard
  5. Fire Dupont tată-tată și mamă-tată
  6. Butoane Push Button
  7. Buzzer
  8. Rezistențe

Software Design

Descrierea codului aplicaţiei (firmware):

  • Am scris codul în ARDUINO IDE, versiunea 2.1.0
  • Pe post de librării ADAFRUIT_GFX.h și ADAFRUIT_SSD1306.h

Programul este împărțit în mai multe faze:

  1. 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.
  2. se alege aleator cana care va acoperi bila.
  3. apoi, folosind permutări, amestecăm cănile, ținându-se cont de viteza primită.
  4. După 4 runde de amestec, acestea încetează, iar jucătorul alege cana în care se află bila
  5. 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

Jocul funcționează foarte bine. Fiindcă nu am folosit debounce, e posibil ca o apăsare mai lungă să arunce cursorul din ecran.

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

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.

proiectpm_virlan_mihnea-alexandru.zip

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

  • 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

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware. 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

Export to PDF

pm/prj2023/amocanu/gaming_console_with_one_game.txt · Last modified: 2023/05/30 06:15 by mihnea.virlan
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