This shows you the differences between two versions of the page.
pm:prj2022:dene:retro-game-console [2022/05/27 21:11] alexandru.bejan0708 [Software Design] |
pm:prj2022:dene:retro-game-console [2022/05/27 22:31] (current) alexandru.bejan0708 [Download] |
||
---|---|---|---|
Line 9: | Line 9: | ||
==== Descriere ==== | ==== Descriere ==== | ||
- | Implementarea jocului clasic de Pong dar controlat in aer prin miscarea mainii. Odata inceput un joc acesta va fi afisat printr-o printr-un display LCD cu o rezolutie de 84x48. De asemenea, pe un alt display LCD se vor afisa diverse informatii despre jocul curent, iar prin intermediul unui buzzer se vor crea efecte sonore. | + | Implementarea jocului clasic de Pong dar controlat in aer prin miscarea mainii. Odata inceput un joc acesta va fi afisat printr-un display LCD cu o rezolutie de 84x48. De asemenea, pe un alt display LCD se vor afisa diverse informatii despre jocul curent, iar prin intermediul unui buzzer se vor crea efecte sonore. |
==== Scop ==== | ==== Scop ==== | ||
Line 18: | Line 18: | ||
Cand consola va fi pornita se va astepta se vor utiliza 3 butoane pentru a naviga prin meniuri si a schimba diferitele setari ale jocului, precum alegerea numarului de puncte cu care se castiga jocul sau timpul limita al unui joc. Jocul va porni cand este aleasa optiunea de "start". | Cand consola va fi pornita se va astepta se vor utiliza 3 butoane pentru a naviga prin meniuri si a schimba diferitele setari ale jocului, precum alegerea numarului de puncte cu care se castiga jocul sau timpul limita al unui joc. Jocul va porni cand este aleasa optiunea de "start". | ||
- | Odata inceput jocul, paletle se vor putea controla prin miscarea unor palete fizice de ping pong in sus si in jos, folosind 2 senzori de distanta, unul pentru fiecare jucator. | + | Odata inceput jocul, paletele se vor putea controla prin miscarea unor palete fizice de ping pong in sus si in jos, folosind 2 senzori de distanta, unul pentru fiecare jucator. |
Jocul se va desfasura display-ul de Nokia 5110, fiecare paleta, fiind reprezentata prin dreptunghiuri pozitionate pe verticala, iar mingea printr-un patrat. Scopul jocului este ca mingea sa ajunga in poarta adversarului. | Jocul se va desfasura display-ul de Nokia 5110, fiecare paleta, fiind reprezentata prin dreptunghiuri pozitionate pe verticala, iar mingea printr-un patrat. Scopul jocului este ca mingea sa ajunga in poarta adversarului. | ||
- | In cadrul jocului, informatii precum scorul sau punctajele vor fi afisate pe display-ul LCD. Buzzer-ul va produce diferite sunete, pentru marcarea unui golurilor. | + | In cadrul jocului, informatii precum scorul sau punctajele vor fi afisate pe display-ul LCD. Buzzer-ul va produce sunete, pentru marcarea unui gol. |
==== Schema bloc ==== | ==== Schema bloc ==== | ||
Line 48: | Line 48: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | <note tip> | + | Ca mediu de dezvoltare pentru proiect am ales **Arduno IDE**. |
- | Descrierea codului aplicaţiei (firmware): | + | Am folosit biblioteca "LiquidCristal_I2C" pentru controlul display-ului LCD 1602 prin I2C. Bibliotecile "SPI.h", "Adafruit_GFX.h" si "Adafruit_PCD8544.h" au fost folosite pentru controlul display-ului de Nokia, prin protocolul SPI. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | + | ||
- | Ca mediu de dezvoltare pentru am ales Arduno IDE. | + | |
- | Am folosit biblioteca "LiquidCristal_I2C" pentru controlul display-ului LCD 1602 prin I2C. | + | |
- | Bibliotecile "SPI.h", "Adafruit_GFX.h" si "Adafruit_PCD8544.h" au fost folosite pentru controlul display-ului de Nokia, prin proticolul SPI. | + | Funcționalitatea proiectului a fost spartă in funcții pentru a fi mai usor de urmarit cursul execuției programului. |
- | + | ||
- | Funcționalitatea proiectului a fost spartă in funcții pentru a fi mai usor de uramtit cursul execuției programului. | + | |
In loop în funcție de valoarea unei variabile de stare a programului, se poate ajunge în funcția responsabila pentru meniul principal, in diversele meniuri pentru setari ale consolei, in modul de joc sau in ecranul de final al jocului. | In loop în funcție de valoarea unei variabile de stare a programului, se poate ajunge în funcția responsabila pentru meniul principal, in diversele meniuri pentru setari ale consolei, in modul de joc sau in ecranul de final al jocului. | ||
Line 68: | Line 58: | ||
Flow-ul jocului este format din urmatorii: | Flow-ul jocului este format din urmatorii: | ||
- | • Jocul se actualizează la 50 de milisecunde | + | * Jocul se actualizează la 50 de milisecunde |
- | • Se citește pozitia fiecarui jucător | + | * Se citește pozitia fiecarui jucător |
- | • Se updateaza display-ul pe baza pozițiilor masurate | + | * Se updateaza display-ul pe baza pozițiilor masurate |
- | • Se updateaza scorul | + | * Se updateaza scorul |
- | • Se actualizează pozitia mingii | + | * Se actualizează pozitia mingii |
- | • Se actualizează sunetul (odată începuta secventa de pasi pentru sunetul de gol marcat, aceasta încrementeaza un counter daca încă mai are cantat) | + | * Se actualizează sunetul (odată începuta secventa de pasi pentru sunetul de gol marcat, aceasta încrementeaza un counter daca încă mai are cantat) |
- | • La final se verifică daca jocul s-a teminat si se poate trece in starea pe joc teminat, in care se așteaptă apasarea butonului select, pentru a reveni la meniul principal | + | * La final se verifică daca jocul s-a teminat si se poate trece in starea pe joc teminat, in care se așteaptă apasarea butonului select, pentru a reveni la meniul principal |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 81: | Line 71: | ||
Care au fost rezultatele obţinute în urma realizării proiectului vostru. | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
</note> | </note> | ||
+ | |||
+ | Am reusit sa creez un joc interactiv pentru 2 jucatori, care atrage jucatorii prin maniera mai speciala de control prin miscarea paletelor de ping pong prin aer. De asemenea, am reusit sa combin toate componentele intr-o carcasa, care face jocul mai usor de transporat si are si rolul de suport pentru paletele de ping pong. | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Mi s-a parut foarte interesant acest proces prin care am putut sa creez o miniconsola de jocuri. Cu toate acestea, daca ar fi sa o iau de la inceput, nu stiu daca as mai incerca sa fac alt joc deoarece odata cu marirea complexitatii am resimtiti limitarile hardware ale arduinio-ului uno, fiind destul de dificil sa creez o experienta fluida la final. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | Fisierele folosite in cadrul proiectului: {{:pm:prj2022:dene:bejan_alex_proiect_pm.zip| Arhiva Proiect}} |
- | 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> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 106: | Line 95: | ||
<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> | ||
+ | <html><a class="Pong wiki" href="https://ro.wikipedia.org/wiki/Pong">Pong game wiki page</a></html> | ||
+ | |||
+ | <html><a class="lab 5" href="https://ocw.cs.pub.ro/courses/pm/lab/lab5-2022">Laborator SPI</a></html> | ||
+ | |||
+ | <html><a class="lab 6" href="https://ocw.cs.pub.ro/courses/pm/lab/lab6-2022">Laborator I2C</a></html> | ||
+ | |||
+ | <html><a class="senzor ultra" href="https://create.arduino.cc/projecthub/abdularbi17/ultrasonic-sensor-hc-sr04-with-arduino-tutorial-327ff6">Tutorial senzor ultrasonic</a></html> | ||
+ | |||
+ | <html><a class="lcd i2c" href="https://lastminuteengineers.com/i2c-lcd-arduino-tutorial/">Tutorial LCD conectat prin I2C</a></html> | ||
+ | |||
+ | <html><a class="lcd nokia" href="https://www.electronics-lab.com/project/arduino-nokia-5110-tutorial-2-displaying-customized-graphics/">Tutorial LCD Nokia conectat prin SPI</a></html> | ||