Differences

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

Link to this comparison view

pm:prj2024:iotelea:maria.tanase0706 [2024/05/17 18:15]
maria.tanase0706
pm:prj2024:iotelea:maria.tanase0706 [2024/05/27 10:33] (current)
maria.tanase0706 [Jurnal]
Line 1: Line 1:
 ====== True or False Game ====== ====== True or False Game ======
 +<note tip>
 +Autor: Tănase Maria-Cătălina\\
 +Grupa: 333CD
 +</​note>​
 ===== Introducere ===== ===== Introducere =====
  
Line 11: Line 15:
 Funcționalitate:​\\ Funcționalitate:​\\
 În starea de început se așteaptă apăsarea butonului de start. Apăsarea oricărui alt buton nu va avea niciun efect. Apoi, se afișează pe ecran o întrebare. Se poate apăsa ori butonul de corect, ori butonul de greșit într-un interval de 10 secunde. Apăsarea butonului de start nu va avea niciun efect. Lipsa apăsării unui buton în acest interval nu va avea niciun efect. Răspunsul corect va porni buzzer-ul și LED-ul verde, cel greșit buzzer-ul și LED-ul roșu. Se repetă acest procedeu de 10 ori. La final, se afișează scorul final, iar după 10 secunde se trece în starea de început.\\ În starea de început se așteaptă apăsarea butonului de start. Apăsarea oricărui alt buton nu va avea niciun efect. Apoi, se afișează pe ecran o întrebare. Se poate apăsa ori butonul de corect, ori butonul de greșit într-un interval de 10 secunde. Apăsarea butonului de start nu va avea niciun efect. Lipsa apăsării unui buton în acest interval nu va avea niciun efect. Răspunsul corect va porni buzzer-ul și LED-ul verde, cel greșit buzzer-ul și LED-ul roșu. Se repetă acest procedeu de 10 ori. La final, se afișează scorul final, iar după 10 secunde se trece în starea de început.\\
-{{ :​pm:​prj2024:​iotelea:​stari.drawio.png?​200 |}}+{{ :​pm:​prj2024:​iotelea:​stari.drawio.png?​400 |}}
  
 Schema bloc a proiectului:​\\ Schema bloc a proiectului:​\\
Line 29: Line 33:
  
 Schemă electrică:​\\ Schemă electrică:​\\
-{{ :​pm:​prj2024:​iotelea:​schema_electrica_mct.png?​200 |}}+{{ :​pm:​prj2024:​iotelea:​schema_electrica_mct.png?​400 |}}
  
  
Line 40: Line 44:
  
  
-<note tip+Am dezvoltat proiectul în Arduino IDE. Am folosit bibliotecile TFT.h și SPI.h pentru comunicarea prin SPI cu LCD-ul. 
-Descrierea codului aplicaţiei ​(firmware): +\\ 
-  mediu de dezvoltare ​(if any) (e.g. AVR StudioCodeVisionAVR) +Pentru a păstra fiecare întrebare alături de răspunsul aferent am folosit următoarea structură:​ 
-  ​librării şi surse 3rd-party ​(e.g. Procyon AVRlib) +<code
-  ​algoritmi şi structuri pe care plănuiţi să le implementaţi +struct question{ 
-  ​* (etapa 3surse şi funcţii implementate +   const char* question; 
-</​note>​ +   const char* answer; 
- +}; 
-===== Rezultate Obţinute ===== +</​code>​ 
- +Am păstrat toate întrebările în vectorul question questions[]. 
-<note tip> +\\ 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +Pentru a selecta în mod aleator 10 întrebări diferite la fiecare joc am implementat funcția **void selectQuestions()** care alege random un index corespunzător unei întrebări și funcția bool **isSelected(int index, int selectedCount)** care verifică dacă întrebarea a mai fost aleasă sau nu. 
-</​note>​+\\ 
 +Logica de funcționare este următoareainițial se citește în continuu valoarea input-ului butoanelor până când se primește o valoare aferentă butonului de start. Apoi se trece în starea de pregătire a jocului: flag-ul de start este setat și scorul este resetat. După, se trece în starea de joc, fiind afișate secvențial 10 întrebări,​ apoi scorul final, după care se trece din nou în starea inițială. 
 +\\ 
 +Funcțiile ​**void wrongAnswer()** și **void rightAnswer()** asigură semnalizarea sonoră și vizuală a corectitudinii răspunsului oferit ​de jucător. 
 +\\ 
 +Pentru afișarea pe ecran a celor trei stări posibile: start, întrebări și scor final am implemntat următoarele funcții: **void printStart()**, **void printGetReady()**, **void printQuestion(const char *question, const char *answer)** și **void printScore()**Funcția void printQuestion(const char *questionconst char *answerse folosește de funcțiile ​**void questionText(const char *question)** care are rolul de afișare a întrebării, **void questionTime(const char *answer)*care se ocupă cu afișarea timpului rămas pentru a răspunde la întrebare și **void questionScore()** care afișează scorul curent. Logica pentru citirea input-ului analogic din partea butoanelor, compararea acestuia cu răspunsul corect șactualizarea scorului curent este implementată în funcția void questionTime(const char *answer). 
 +\\ 
 +De asemenea, pentru a încadra corespunzător pe ecran fragmentele lungi de text am folosit un script în python, deoarece bibliotecile nu puneau la dispoziție funcții de wrap-around.
  
 ===== Concluzii ===== ===== Concluzii =====
 +Dezvoltarea unui proiect de la zero a fost o experiență interesantă,​ dar care a ridicat destul de multe provocări. ​
 +\\
 +Piesele pe care le-am ales inițial nu s-au potrivit pe deplin cu nevoile proiectului așa că a trebuit să modifc lista de componente pe parcurs. În implementarea hardware am încercat pe cât posibil să realizez un circuit bine organizat și ușor de urmărit, care să ofere vizibilitate și acces ușor la componentele cu care utilizatorul trebuie să interacționeze. Pentru partea de software a trebuit să mă confrunt cu memoria limitată și cu sincronizarea mai multor aspecte ale jocului. De asemenea afișarea fragmentelor mai lungi de text a fost o problemă.
 +\\
 +Rezultatul acestui proces este un joc simplu, din toate punctele de vedere, dar distractiv și care funcționează conform așteptărilor.
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +{{:pm:prj2024:iotelea:trueorfalse.zip|}}
-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 =====
- +  * 26.04.2024: Alegerea temei de proiect 
-<note tip> +  * 04.05.2024: Crearea paginii proiectului șrealizarea introducerii ​și a descrierii generale
-Putețavea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului+  * 15.05.2024 - 16.05.2024: Implementare și testare hardware 
-</​note>​+  * 22.05.2024 - 24.05.2024: Implementare și testare software
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
 <​note>​ <​note>​
-**Resurse ​Hardware:**+**Resurse:​**
   * https://​www.the-diy-life.com/​multiple-push-buttons-on-one-arduino-input/​   * https://​www.the-diy-life.com/​multiple-push-buttons-on-one-arduino-input/​
   * https://​www.youtube.com/​watch?​v=72SrQuVU3Ww   * https://​www.youtube.com/​watch?​v=72SrQuVU3Ww
 +  * https://​www.circuit-diagram.org
 +  * https://​www.arduino.cc/​reference/​en/​libraries/​tft/​
 +  * https://​www.arduino.cc/​reference/​en/​language/​functions/​random-numbers/​random/​
 +  * https://​www.arduino.cc/​reference/​en/​language/​functions/​advanced-io/​tone/​
 +  * https://​muted.io/​note-frequencies/​
 +  * https://​www.britannica.com/​quiz/​browse#​recent-quizzes
 +  * https://​www.sciencefocus.com/​science/​fun-facts
 </​note>​ </​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>​
  
pm/prj2024/iotelea/maria.tanase0706.1715958939.txt.gz · Last modified: 2024/05/17 18:15 by maria.tanase0706
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