Table of Contents

Joc spanzuratoarea

Dragomir Constantin-Cristian 334CB

Introducere

Cu ajutorul unor componente electronice, se vrea recrearea clasicului joc spanzuratorea.

Regulile jocului sunt urmatoarele: Jucatorului ii este dat un cuvant, iar acesta trebuie sa ghiceasca literele din care este compus. Spre exemplu, daca jucatorul alege litera 'A', iar aceasta face parte din cuvant, atunci pozitiile literei ii vor fi descoperite jucatorului. In schimb, daca litera NU face parte din cuvant, o parte din corpul unui jucator va fi taiata, pana nu vor mai ramane parti componente. De aici rezulta faptul ca un jucator are maxim 6 greseli pe care le poate comite pana ce cuvantul va fi ghicit.

Descriere generala

Cu ajutorul unui keypad, jucătorul trebuie sa ghiceasca literele pentru a descoperi cuvântul afișat pe LCD. Șansele jucătorului vor fi exprimate printr-o matrice de leduri reprezentând un omuleț. La o literă ghicita corect/greșit se va aplica un efect sonor. Volumul sunetului la iesire va putea fi reglat cu ajutorul unui potentiometru.

Hardware Design

Lista componente

Reprezentarea fizica

Schema bloc

Schema electrica

Mod de utilizare

Link prezentare: https://youtu.be/mWP--dmayok

Pentru a introduce o anumita litera astfel incat aceasta sa fie afisata pe ecran se utilizeaza o tastatura 4×4, iar principiul de functionare se bazeaza pe cel al unui telefon Nokia vechi. Prin apasarea repetata a unei taste, se pot selecta, spre exemplu, literele A, B, C. Ideea se poate intelege mai bine consultand imaginea de mai jos.

Taieturile cu rosu fac trimitere la faptul ca acele butoane nu sunt utilizate in cadrul acestui proiect

Software Design

Mediu de dezvoltare: Arduino IDE
Biblioteci folosite: LiquidCrystal_I2C.h, LedControl.h

Descrierea codului

Codul rulat pe placuta Arduino se poate gasi la acest link: https://github.com/cristidragomir/Joc-Spanzuratoarea/blob/main/sketch_may22a.ino

In partea de setup() am initializat afisarea la Serial Monitor in scop de debug. Am ales random indexul din lista de cuvinte interne care va fi de ghicit. Se initializeaza pinii pentru citirea inputului de la keyboard, se afiseaza mesajele de bun-venit; se seteaza literele corespunzatoare fiecarui buton de la tastatura, butonul curent si anterior apasat, statusul jocului, LCD-ul si se initializeaza poll-ul de cuvinte.

Pentru afisarea unui mesaj la ecranul LCD mi-am creat o functie specializata displayMessage() care imi afiseaza mesajul fractionat, deoarece LCD-ul poate afisa maxim 32 de caractere.

In partea de loop() ne utilizam de logica din spatele unei matrice de butoane. Fiecare rand este pus pe LOW pt a marca faptul ca acel rand este analizat spre a se vedea daca un anumit buton este apasat. La randul i setat pe LOW(in timp ce celelalte sunt setate pe HIGH) se citeste daca o coloana s-a trecut pe LOW in urma apasarii. Daca da, in functie de linie si coloana se calculeaza ce buton a fost apasat. Pentru a iesi din starea 0 a jocului (abia a fost pornit Arduino) sau 2 (un joc s-a terminat) trebuie apasat ENTER. Astfel, se trece in starea 1 sau 3, iar jocul practic incepe. Cand se apasa un buton diferit de ENTER se trece in selectLetter() unde counterul tuturor tastelor se trece la 0 insemnand ca la apasarea unei alte taste se incepe de la 'A'. Daca se apasa aceeasi tasta ca cea anterioara se incrementeaza counterul unei taste, adica 'A' devine 'B', iar 'B' devine 'C', etc.. Cand se apasa tasta ENTER, avand o litera care se vrea a fi verificata se trece la functia letterSubmittedCases(). Aici, daca litera face parte din cuvant, se incrementeaza numarul de caractere ghicite din cuvant(var. globala), se va afisa un mesaj in acest sens si se va reda un efect sonor. De-asemenea, daca numarul de caractere ghicite e acelasi cu lungimea cuvantului jocul este castigat. Cam aceeasi logica, cumva negata, se aplica si atunci cand litera data spre verificare nu face parte din cuvant. La un nou joc, parametrii programului sunt resetati.

Jurnal

08.05.2022: Creare pagina wiki
27.05.2022: Editare pagina wiki pentru milestone 2

Concluzii

Acest proiect a avut un impact foarte mare asupra dezvoltarii mele pe plan tehnic. Aceasta imbinare intre hard si soft mi-a dat ocazia sa-mi pun la incercare expertiza si intuitia pentru a realiza un produs finit. Am fost pus in postura de a lua multe decizii, incepand de la alegerea componentelor pana la functionalitatile ce aveau sa apara incet-incet in codul sursa. Recomand ca toti viitorii studenti sa-si dea silinta, sa-si puna mintea la contributie cu acest proiect intrucat vor avea numai de castigat.

Bibliografie/Resurse

Atmega328p datasheet
https://circuitdigest.com/microcontroller-projects/arduino-8x8-led-matrix
https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/2441-tastatura-matriceala-4x4-cu-butoane.html?search_query=tastatura&results=55
https://create.arduino.cc/projecthub/Arnov_Sharma_makes/lcd-i2c-tutorial-664e5a
https://www.arduino.cc/reference/en/language/functions/random-numbers/random/
Export to PDF