This is an old revision of the document!


Udristioiu Alexandru Hangman

Hangman LCD

Autor : Udristioiu Alexandru

Grupa : 331CB

Email : udristioiualexandru@gmail.com

Introducere

Proiectul meu se bazeaza pe jocul Hangman(spanzuratoarea).Mesajele specifice verificarii fiecarei litere se vor afisa pe un LCD.

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.

Schema bloc:

Hardware Design

Lista de piese:

* Arduino
* Buzzer
* Rezistente
* Keypad 4×4
* Breadboard
* Fire
* Ecran LCD 1602
* Potentiometru

Schema electrica

Software Design

Am lucrat in mediul de dezvoltare Arduino IDE.Ca si biblioteci am folosit urmatoarele :

  • LiquidCrystal.h - partea de LCD si interfatarea cu aceasta
  • Keypad.h - lucrul cu tastatura matriceala 4×4 ( link download : Keypad )

Variabile folosite :
1. lcd - de tip LiquidCrystal setat cu pinii respectivi
2. alphabet[26] - toate literele din alfabet
3. Pentru tastatura :

  • rows - numar de linii
  • columns - numar de coloane
  • pinRows - pinii asociati pe linii
  • pinColumns - pinii asociati pe coloane
  • keys[rows][columns] - matricea de taste
  • keyboard - de tip Keypad setata cu parametrii de mai sus (pentru keys se foloseste makeKeyMap() pentru conversia de la 2d la un key map inteles de librarie)

4. st - cuvantul dat
5. len - lungimea cuvantului
6. nrLives - numarul de vieti ale jucatorului setat la 3
7. key - char pentru primirea tastei apasate
8. count[14] - vector in care tin pentru fiecare tasta numarul de apasari
9. v - sir de caractere unde tin literele apasate deja
10.flag - variabila folosita pentru a citi o singura data cuvantul

Functii :
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.

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 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.

Pentru sunete am folosit functia tone() ce genereaza un semnal de PWM cu 50% duty cycle (pin-ul pe care este setat trebuie sa aiba PWM).

Pentru afisarea unei variabile de tip String pe LCD am facut conversia la un vector de char prin toCharArray() si dupa am afisat.

Rezultate Obţinute

Montaj:

Se asteapta cuvantul venit pe interfata USART

Se afiseaza prima si ultima litera

Se incepe verificarea literelor apasate

Litera apartine cuvantului si se afiseaza numarul de aparitii si pozitiile acesteia :


Toate literele au fost ghicite :

Litera nu este in cuvant :

Numarul de vieti este 0 si s-a incheiat jocul :

Litera a fost deja verificata :

Demo-ul proiectului se gaseste pe drive aici : Hangman_demo

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.

Download

In arhiva se afla fisierul Arduino si un readme pentru asocierile taste-numar apasari-litera. 331cb_udristioiualexandru_hangman.zip

Jurnal

* 24 aprilie - Alegere tema proiect
* 25 aprilie - Creare wiki
* 29 aprilie - Adaugare schema electrica
* 30 aprilie - Implementare cod(tinkercad)
* 11 mai - Achizitionare piese
* 14 mai - Realizare montaj
* 16 mai - Imbunatatire cod si verificare pe montaj

Bibliografie/Resurse

pm/prj2021/alazar/hangman_lcd.1621697083.txt.gz · Last modified: 2021/05/22 18:24 by audristioiu
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