This shows you the differences between two versions of the page.
pm:prj2021:alazar:hangman_lcd [2021/05/22 18:31] audristioiu [Software Design] |
pm:prj2021:alazar:hangman_lcd [2021/05/27 19:20] (current) audristioiu [Bibliografie/Resurse] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | [[https://ocw.cs.pub.ro/courses/pm/prj2021/alazar/hangman_lcd|Udristioiu Alexandru Hangman]] | ||
====== Hangman LCD ====== | ====== Hangman LCD ====== | ||
=== Autor : Udristioiu Alexandru === | === Autor : Udristioiu Alexandru === | ||
Line 5: | Line 4: | ||
=== Email : udristioiualexandru@gmail.com === | === Email : udristioiualexandru@gmail.com === | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul meu se bazeaza pe jocul Hangman(spanzuratoarea).Mesajele specifice verificarii fiecarei litere se vor afisa pe un LCD. | + | Proiectul meu se bazeaza pe jocul Hangman(spanzuratoarea).Mesajele specifice verificarii fiecarei litere se vor afisa pe un LCD , precum si castigarea/pierderea jocului. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Voi folosi un keypad pentru introducerea literelor si voi verifica daca se afla in cuvant,moment in care voi semnala daca aceasta exista printr-un sunet provenit de la un buzzer.Altfel va scadea numarul de vieti(3) initiale.Daca numarul de vieti este 0 atunci jocul s-a terminat(cu mesaj pe ecran + sunet). Output-ul se va afisa pe un LCD si atunci cand s-au ghicit toate literele(+ sunet). Cuvantul ce se doreste ghicit va fi citit de pe interfata seriala.Din lungimea totala a cuvantului se scade numarul de aparitii al literei ghicite.Atunci cand s-a ajuns la 0 inseamna ca acesta a fost complet gasit.Pe ecran se vor afisa si mesaje in cazul in care litera a fost deja verificata,s-a gasit cate o litera(unde se afizeaza si numarul de aparitii + pozitia literei) care se regaseste sau ea nu exista in cuvantul dat. | + | Voi folosi un keypad pentru introducerea literelor si voi verifica daca se afla in cuvant,moment in care voi semnala daca aceasta exista printr-un sunet provenit de la un buzzer.Altfel va scadea numarul de vieti(3) initiale.Daca numarul de vieti este 0 atunci jocul s-a terminat(cu mesaj pe ecran + sunet). Output-ul se va afisa pe un LCD si atunci cand s-au ghicit toate literele(+ sunet). Cuvantul ce se doreste ghicit va fi citit de pe interfata seriala.Din lungimea totala a cuvantului se scade numarul de aparitii al literei ghicite.Atunci cand s-a ajuns la 0 inseamna ca acesta a fost complet gasit.Pe ecran se vor afisa si mesaje in cazul in care litera a fost deja verificata,s-a regasit in cuvantul dat(unde se afiseaza si numarul de aparitii + pozitia literei) sau ea nu apare . |
Line 28: | Line 27: | ||
{{:pm:prj2021:alazar:schema_electrica_hangman.png ? 400|}} | {{:pm:prj2021:alazar:schema_electrica_hangman.png ? 400|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | Am lucrat in mediul de dezvoltare Arduino IDE.Ca si biblioteci am folosit urmatoarele : | + | Am lucrat in mediul de dezvoltare [[https://www.arduino.cc/en/software | Arduino IDE]].Ca si biblioteci am folosit urmatoarele : |
* LiquidCrystal.h - partea de LCD si interfatarea cu aceasta | * LiquidCrystal.h - partea de LCD si interfatarea cu aceasta | ||
* Keypad.h - lucrul cu tastatura matriceala 4x4 ( link download : [[https://www.arduinolibraries.info/libraries/keypad| Keypad]] ) | * Keypad.h - lucrul cu tastatura matriceala 4x4 ( link download : [[https://www.arduinolibraries.info/libraries/keypad| Keypad]] ) | ||
Line 59: | Line 58: | ||
3.** Win()** \\ | 3.** Win()** \\ | ||
- | Functie in care se ajunge daca tot cuvantul a fost ghicit.Se notifica acest fapt prin mesaj pe ecranul LCD si un sunet corespunzator. | + | Functie in care se ajunge daca tot cuvantul a fost ghicit.Se notifica acest fapt prin mesaj pe ecranul LCD si un sunet corespunzator.Se reseteaza variabilele folosite mai apoi. |
4. **endGame()** \\ | 4. **endGame()** \\ | ||
- | Functie in care se ajunge daca numarul de vieti a ajuns la 0(jocul a fost pierdut).Se notifica acest fapt prin mesaj pe ecranul LCD si un sunet corespunzator. | + | Functie in care se ajunge daca numarul de vieti a ajuns la 0(jocul a fost pierdut).Se notifica acest fapt prin mesaj pe ecranul LCD si un sunet corespunzator.Se reseteaza variabilele folosite mai apoi. |
5. **setup()** \\ | 5. **setup()** \\ | ||
Line 70: | Line 69: | ||
Aici a fost implementata logica jocului. | Aici a fost implementata logica jocului. | ||
- | Prima oara se citeste cuvantul de pe interfata pe baza caruia sunt setate variabilele len,flag,count si v. | + | Prima oara se citeste cuvantul de pe interfata pe baza caruia sunt setate variabilele len,flag,count si v.Pentru afisarea unei variabile de tip String pe LCD am facut conversia la un vector de char prin [[https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/tochararray/|toCharArray()]] si dupa am afisat. |
Apoi se preia cheia apasata si se incepe verificarea literelor.getIdx este o variabila folosita pentru a salva cheia apasata. | Apoi se preia cheia apasata si se incepe verificarea literelor.getIdx este o variabila folosita pentru a salva cheia apasata. | ||
+ | Pentru cheia 7 verific litera obtinuta si pentru celelalte de la 0 la 9 pun in vector numarul de apasari care se | ||
+ | reseteaza daca a fost apasat de mai mult de 3 ori)..Primele 4 litere(a,b,c,d) au fost initializate cu cele de pe tastatura. | ||
- | Pentru tastele de la 0 la 9 (fara 7 care il folosesc drept Ok pentru verificarea fiecarei litere) am asociat literele cu numarul de apasari (readme pentru taste este pus in arhiva).Primele 4 litere(a,b,c,d) au fost initializate cu cele de pe tastatura. | + | Pentru verificare prima oara selectez litera pe care o caut pe baza numarului de apasari si a tastei,apoi verific daca ea a mai fost apasata deja si dupa apelez functia CheckKeypad. |
- | Pentru sunete am folosit functia [[https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/ | tone()]] ce genereaza un semnal de PWM cu 50% duty cycle (pin-ul pe care este setat trebuie sa aiba PWM). | + | Pentru sunete am folosit functia [[https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/ | tone()]] ce genereaza un semnal de PWM cu 50% duty cycle (pin-ul pe care este setat trebuie sa aiba suport pentru PWM). |
- | Pentru afisarea unei variabile de tip String pe LCD am facut conversia la un vector de char prin [[https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/tochararray/|toCharArray()]] si dupa am afisat. | ||
Line 107: | Line 108: | ||
Demo-ul proiectului se gaseste pe drive aici : [[https://drive.google.com/drive/folders/1wDem01Oq5A7P9Lzj5jDHa0qNywRQYeyI|Hangman_demo]] | Demo-ul proiectului se gaseste pe drive aici : [[https://drive.google.com/drive/folders/1wDem01Oq5A7P9Lzj5jDHa0qNywRQYeyI|Hangman_demo]] | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | A fost un proiect interesant.Consider ca este o experienta din care am foarte multe de invatat,chiar daca implementarea jocului a fost destul de simpla. | + | A fost un proiect interesant.Consider ca este o experienta din care am foarte multe de invatat. |
===== Download ===== | ===== Download ===== | ||
- | In arhiva se afla fisierul Arduino si un readme pentru asocierile taste-numar apasari-litera. | + | In arhiva se afla fisierul Arduino si un readme pentru asocierile litera-tasta: |
{{:pm:prj2021:alazar:331cb_udristioiualexandru_hangman.zip|}} | {{:pm:prj2021:alazar:331cb_udristioiualexandru_hangman.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 119: | Line 120: | ||
* 14 mai - Realizare montaj \\ | * 14 mai - Realizare montaj \\ | ||
* 16 mai - Imbunatatire cod si verificare pe montaj \\ | * 16 mai - Imbunatatire cod si verificare pe montaj \\ | ||
+ | * 25 mai - Finalizare pagina wiki | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">PDF</a></html> | ||
Line 129: | Line 131: | ||
* https://ocw.cs.pub.ro/courses/pm/lab/lab6-2021 - LCD \\ | * https://ocw.cs.pub.ro/courses/pm/lab/lab6-2021 - LCD \\ | ||
* Schema bloc a fost facuta in [[https://app.diagrams.net]] \\ | * Schema bloc a fost facuta in [[https://app.diagrams.net]] \\ | ||
- | * Schema electrica a fost facuta in [[https://www.tinkercad.com/dashboard]] | + | * Schema electrica a fost facuta in [[https://www.tinkercad.com/dashboard]] |