This shows you the differences between two versions of the page.
pm:prj2023:gpatru:memory_game [2023/05/30 08:38] stefan.apostol1906 [Descriere generală] |
pm:prj2023:gpatru:memory_game [2023/05/30 11:13] (current) stefan.apostol1906 [Scurta descriere a claselor] |
||
---|---|---|---|
Line 62: | Line 62: | ||
Pentru acest proiect am dedcis sa lucrez cu Arduino IDE. De asemenea, pentru a putea rula jocul cu usurinta tot ce trebuie facut e sa descarcati arhiva cu proiectul, sa includeti libraria in folder-ul "libraries" din folder-ul Arduino si sa rulati exemplul sugerat de IDE "Run game". | Pentru acest proiect am dedcis sa lucrez cu Arduino IDE. De asemenea, pentru a putea rula jocul cu usurinta tot ce trebuie facut e sa descarcati arhiva cu proiectul, sa includeti libraria in folder-ul "libraries" din folder-ul Arduino si sa rulati exemplul sugerat de IDE "Run game". | ||
+ | Astfel, pentru a facilita utilizarea si rularea cu usurinta a proiectului codul este structurat in 2 fisiere: | ||
+ | * MemoryGame.h - header ce contine toate functiile si variabilele definite | ||
+ | * MemoryGame.cpp - implementarea functiilor propriu zise | ||
+ | <note tip> | ||
Pentru implementare am folosit urmatoarele biblioteci: | Pentru implementare am folosit urmatoarele biblioteci: | ||
* Wire.h si LiquidCrystal_I2C.h pentru display-ul LCD | * Wire.h si LiquidCrystal_I2C.h pentru display-ul LCD | ||
Line 70: | Line 74: | ||
Pentru a putea organiza mai usor structura proiectului am facut 3 clase majore : | Pentru a putea organiza mai usor structura proiectului am facut 3 clase majore : | ||
+ | * Time | ||
+ | * GameState | ||
+ | * MemoryGame - clasa de baza a proiectului | ||
+ | </note> | ||
+ | |||
+ | ==== Scurta descriere a claselor ==== | ||
+ | |||
+ | |||
* Time - aceasta clasa este folosita pentru a retine date legate de ora si ziua curenta. Aceasta dispune de 3 functii importante: | * Time - aceasta clasa este folosita pentru a retine date legate de ora si ziua curenta. Aceasta dispune de 3 functii importante: | ||
- SetValues() -> preia datele oferite de modulul RTC si le stocheaza in campurile aferente clasei. | - SetValues() -> preia datele oferite de modulul RTC si le stocheaza in campurile aferente clasei. | ||
Line 89: | Line 101: | ||
- input() -> aceasta functie se ocupa de a prelua input de la utilizator (analog si digital). | - input() -> aceasta functie se ocupa de a prelua input de la utilizator (analog si digital). | ||
- | Overall, acesta clasa nu poate fi folosita decat intr-un singur mod: | + | Acestea sunt toate functiile si variabilele ce se pot accesa: |
- | MemoryGame->init(); | + | |
- | (while 1) | + | {{:pm:prj2023:gpatru:stefan_ap:fields1.png?350x250 }} |
- | { | + | {{ :pm:prj2023:gpatru:stefan_ap:fields2.png?350x250}} |
- | MemoryGame->draw(); | + | |
- | MemoryGame->update(); | + | |
- | MemoryGame->input(); | + | <note tip> |
+ | Fisierul in care se executa codul principal ("main-ul" din Arduino IDE) este unul foarte simplu avand in vedere organizarea codului: | ||
+ | #include <MemoryGame.h> | ||
+ | MemoryGame *game = new MemoryGame(); | ||
+ | ISR(TIMER1_COMPA_vect) { | ||
+ | // Interrupt code | ||
+ | game->g_sleepPeriod = game->g_sleepPeriod + 1; | ||
+ | game->setGreenValue(game->getGreenValue() - 30); | ||
} | } | ||
+ | void setup() { | ||
+ | game->init(); | ||
+ | } | ||
+ | void loop() { | ||
+ | game->draw(); | ||
+ | game->update(); | ||
+ | game->input(); | ||
+ | } | ||
+ | </note> | ||
+ | |||
Jocul este mai mult un state machine. Asteapta input si pe baza acestuia schimba sau nu starea jocului. | Jocul este mai mult un state machine. Asteapta input si pe baza acestuia schimba sau nu starea jocului. | ||
- | {{:pm:prj2023:gpatru:stefan_ap:state_machine.png?800:400}} | + | {{:pm:prj2023:gpatru:stefan_ap:state_machine.png?800x400 }} |
<note>Exista un mic bug de proiectare in aceasta schema a state machine-ului :))). Jocul nu se duce din starea TIME_SHOW in starea RUNNING cand se apasa play, ci se duce din starea MENU in starea RUNNING cand se apasa play.</note> | <note>Exista un mic bug de proiectare in aceasta schema a state machine-ului :))). Jocul nu se duce din starea TIME_SHOW in starea RUNNING cand se apasa play, ci se duce din starea MENU in starea RUNNING cand se apasa play.</note> | ||
Line 124: | Line 153: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | A fost frumos sa lucrez la acest proiect. Am invatat cum comunica componentele intre ele si acesta este si primul proiect fizic pe care il fac. | + | A fost frumos sa lucrez la acest proiect. Am invatat cum comunica componentele intre ele si acesta este si primul proiect fizic pe care il fac. Codul este usor de modificat in caz ca s-ar dori sa se adauge noi moduri de joc si noi functionalitati, dar trebuie optimizat din cauze lipsei de memorie pe care microcotroller-ul o duce (in momentul actual codul ocupa fara sa ruleze in jur de 80% din memorie). As fi dorit sa am un buzzer mai puternic deoarece accesta pe care l-am achizitionat nici in video-ul de prezentare nu se aude, dar singura varianta era un buzzer pasiv deoarece aveam nevoi de sunete diferite in functie de ce tasta analog s-a apasat. |
===== Download ===== | ===== Download ===== | ||
- | {{:pm:prj2023:gpatru:stefan_ap:memorygame.zip|}} | + | {{:pm:prj2023:gpatru:stefan_ap:memory_game.zip|Cod sursa}} |
- | <note warning> | + | {{:pm:prj2023:gpatru:stefan_ap:chematic.zip|Schematic proiect}} |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului | + | |
- | </note> | + | <note tip>Tot ce trebuie facut e sa descarcati arhiva, sa o importati din Arduino IDE si sa deschideti exemplul oferit de IDE "Game" din libraria "Memory Game"</note> |
===== Jurnal ===== | ===== Jurnal ===== | ||
+ | * 30 mai 2023 - modificare schematic + arhiva zip schematic | ||
+ | * 30 mai 2023 - adaugare specificatii software | ||
+ | * 30 mai 2023 - adaugare README in arhiva | ||
+ | * 30 mai 2023 - update descriere proiect | ||
* 29 mai 2023 - adaugare specificatii hardware, software, concluzii, rezultate, bibliografie | * 29 mai 2023 - adaugare specificatii hardware, software, concluzii, rezultate, bibliografie | ||
* 29 mai 2023 - modificare introducere + lista componente | * 29 mai 2023 - modificare introducere + lista componente | ||
Line 150: | Line 183: | ||
Resurse software: | Resurse software: | ||
+ | * https://docs.arduino.cc/built-in-examples/digital/Debounce | ||
* https://arduinogetstarted.com/tutorials/arduino-micro-sd-card | * https://arduinogetstarted.com/tutorials/arduino-micro-sd-card | ||
* https://randomnerdtutorials.com/guide-for-ds18b20-temperature-sensor-with-arduino/ | * https://randomnerdtutorials.com/guide-for-ds18b20-temperature-sensor-with-arduino/ |