Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:gpatru:memory_game [2023/05/30 08:32]
stefan.apostol1906 [Software Design]
pm:prj2023:gpatru:memory_game [2023/05/30 11:13] (current)
stefan.apostol1906 [Scurta descriere a claselor]
Line 16: Line 16:
 {{:​pm:​prj2023:​gpatru:​stefan_ap:​schema_bloc2.png}} {{:​pm:​prj2023:​gpatru:​stefan_ap:​schema_bloc2.png}}
  
-Jocul ofera o comunicare prin semnal analog intre user si microcontroller,​ user-ul folosind o mini tastatura formata din 6 butoane. De asemenea, user-ul poate comunica si prin folosirea a 3 butoane conectate digital la Arduino, butoane ce sunt psentru ​a naviga cu usurinta prin meniul de setari.+Jocul ofera o comunicare prin semnal analog intre user si microcontroller,​ user-ul folosind o mini tastatura formata din 6 butoane. De asemenea, user-ul poate comunica si prin folosirea a 3 butoane conectate digital la Arduino, butoane ce sunt pentru ​a naviga cu usurinta prin meniul de setari. 
 + 
 +Jucatorul poate naviga printr-un meniu simplu cu 4 setari, de unde poate sa si porneasca jocul apasand pe optiunea de "​play"​. Odata apasata aceasta optiune jocul inccepe de la nivelul 0. Microcontroller-ul va genera o secventa de caractere random pe baza unui functii f(x, y) ce primeste ca input valoarea data de senzorul de temperatura si valoarea senzorului de lumina. Vom trata aceasta functie ca un blackbox in spatele jocului deoarece ne dorim ca jocul sa nu redea o secventa previzibila pentru jucator. Jucatorul trebuie sa tasteze, folosind cele 6 butoane, in ordinea corecta literele generate de Arduino. In caz contrar se scade o viata din totalul de vieti al jucatorului si se repeta secventa generata. Jocul se termina cand player-ul ramane cu 0 vieti, urmand ca acesta sa fie intampinat de un meniu ce ii ofera posibilitatea de a relua jocul sau de a merge inapoi in meniul de setari.  ​
  
 Acesta este proiectul complet in format fizic: Acesta este proiectul complet in format fizic:
Line 60: 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 68: 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 87: 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 122: 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 148: 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/​
pm/prj2023/gpatru/memory_game.1685424737.txt.gz · Last modified: 2023/05/30 08:32 by stefan.apostol1906
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