This shows you the differences between two versions of the page.
pm:prj2021:abasoc:mastermind [2021/05/03 00:04] andrei.preda3006 |
pm:prj2021:abasoc:mastermind [2021/06/03 11:53] (current) andrei.preda3006 |
||
---|---|---|---|
Line 7: | Line 7: | ||
[[https://en.wikipedia.org/wiki/Mastermind_(board_game)|Mastermind]] este un joc de societate în care o persoană încearcă să ghicească un cod ales de adversarul său. Pentru a reuși, jucătorul poate propune mai multe variante ale codului final, primind pentru fiecare informații despre diferențele dintre răspunsul corect și cel încercat. | [[https://en.wikipedia.org/wiki/Mastermind_(board_game)|Mastermind]] este un joc de societate în care o persoană încearcă să ghicească un cod ales de adversarul său. Pentru a reuși, jucătorul poate propune mai multe variante ale codului final, primind pentru fiecare informații despre diferențele dintre răspunsul corect și cel încercat. | ||
- | Scopul proiectului este implementarea acestui joc folosind un microcontroller Arduino și oferirea posibilității de a juca împotriva "calculatorului". Va fi disponibil atât modul în care jucătorul trebuie să ghicească codul, cât și modul în care el îl alege. | + | Scopul proiectului este implementarea acestui joc folosind un microcontroller Arduino și oferirea posibilității de a juca împotriva "calculatorului". |
Proiectul poate fi aproape util cuiva foarte plictisit și în lipsă de oricare alte activități. | Proiectul poate fi aproape util cuiva foarte plictisit și în lipsă de oricare alte activități. | ||
Line 54: | Line 54: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | Pentru dezvoltarea software-ului am folosit **arduino-cli**. | ||
+ | |||
+ | Am avut nevoie să instalez și câteva biblioteci, precum **LiquidCrystal I2C** și **FTDebouncer**. | ||
+ | |||
+ | Am împărțit codul în două module mari: unul pentru jocul propriu-zis și unul pentru interacțiunea cu melodiile din program. | ||
+ | |||
+ | Pentru a modela succesiunea de acțiuni a utilizatorului și "interfețele" programului la fiecare pas, am implementat un fel de automat finit, cu stări precum **Citirea codului** sau **Afișarea feedback-ului**. Acest design m-a ajutat destul de mult la implementarea condițiilor de stop-joc, deoarece sunt destul de multe și pot apărea din mai multe părți ale programului (timpul s-a scurs, jucătorul a rămas fără încercări, jucătorul a ghicit răspunsul etc.). | ||
+ | |||
+ | De asemenea, am ținut actualizările LCD-ului la un minim necesar, pentru eficiență și o experiență mai plăcută. | ||
+ | |||
+ | Tot pentru o experiență intuitivă, am folosit un mod custom de debouncing pe baza **FTDebouncer**. | ||
===== Rezultate obținute ===== | ===== Rezultate obținute ===== | ||
+ | |||
+ | Jocul obținut funcționează bine și este intuitiv de folosit. Implementarea fizică poate fi văzută mai jos. | ||
+ | |||
+ | {{pm:prj2021:abasoc:preda-andrei-rezultat.jpg?600x337}} | ||
+ | |||
+ | De asemenea, un video demo se găsește pe {{https://youtu.be/4UfQ4xzEQAw|Youtube}}. | ||
+ | |||
+ | Jocul este destul de simplu. Am încercat să implementez și un mod de "rezolvare automată", în care două plăcuțe Arduino concurau una împotriva celeilalte, dar nu am reușit să implementez comunicarea prin SPI. | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | |||
+ | Mă bucur că am avut ocazia să lucrez la un proiect acest semestru și să folosesc unele noțiuni învățate la laborator, chiar dacă nu am realizat un proiect complex. Am descoperit și că cele mai simple probleme de debugging te pot întârzia destul de mult dacă nu ești atent. | ||
===== Download ===== | ===== Download ===== | ||
+ | |||
+ | Arhiva se descarcă de {{pm:prj2021:abasoc:preda-andrei-arhiva.zip|aici}}. | ||
+ | |||
+ | Proiectul este disponibil și pe [[https://github.com/pandrei7/pm-proiect|Github]]. | ||
+ | |||
+ | Această pagină se exportă de [[https://ocw.cs.pub.ro/courses/pm/prj2021/abasoc/mastermind?do=export_pdf|aici]]. | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 65: | Line 93: | ||
* **02.05.2021** - Introducere, schemă bloc, schemă electrică | * **02.05.2021** - Introducere, schemă bloc, schemă electrică | ||
* **03.05.2021** - Linkuri corecte către imagini | * **03.05.2021** - Linkuri corecte către imagini | ||
+ | * **03.06.2021** - Design software, Concluzii, Bibliografie | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | |||
+ | * [[https://www.arduino.cc/reference/en/|Referință Arduino]] | ||
+ | * [[https://ocw.cs.pub.ro/courses/pm|Laboratoare PM]] | ||
+ | * [[https://github.com/ubidefeo/FTDebouncer|Repo FTDebouncer]] | ||
+ | * [[https://create.arduino.cc/projecthub/Arnov_Sharma_makes/lcd-i2c-tutorial-664e5a|Ghid LCD I2C]] |