This shows you the differences between two versions of the page.
pm:prj2021:alazar:hangman_lcd [2021/05/22 18:24] 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 51: | Line 50: | ||
Functii : \\ | Functii : \\ | ||
- | 1. search(char letter, String st, int pos[]) \\ | + | 1. **search(char letter, String st, int pos[])** \\ |
Caut litera in cuvant si returnez numarul de aparitii,iar in vectorul pus tin pozitiile la care se afla litera gasita daca exista. | Caut litera in cuvant si returnez numarul de aparitii,iar in vectorul pus tin pozitiile la care se afla litera gasita daca exista. | ||
- | 2. CheckKeypad(char c, String word) \\ | + | 2. **CheckKeypad(char c, String word)** \\ |
Functie in care verific prin functia search de cate ori apare litera in cuvant si scad din lungimea totala a cuvantului | Functie in care verific prin functia search de cate ori apare litera in cuvant si scad din lungimea totala a cuvantului | ||
nr de aparitii(daca apare) sau scad numarul de vieti.La final returnez numarul de vieti ramase. | nr de aparitii(daca apare) sau scad numarul de vieti.La final returnez numarul de vieti ramase. | ||
- | 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. | + | 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.Se reseteaza variabilele folosite mai apoi. | ||
- | 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). | + | 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.Se reseteaza variabilele folosite mai apoi. | ||
+ | |||
+ | 5. **setup()** \\ | ||
+ | Functie in care am initializat lcd-ul,am setat pinul PWM pentru buzzer ca OUTPUT si am pornit interfata seriala. | ||
+ | |||
+ | 6. **loop()** \\ | ||
+ | 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.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. | ||
+ | |||
+ | 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 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 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 91: | 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 103: | 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 113: | 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]] |