This shows you the differences between two versions of the page.
pm:prj2021:abirlica:sudoku [2021/05/28 23:11] lucian.mincea [Hardware Design] |
pm:prj2021:abirlica:sudoku [2021/05/31 16:21] (current) lucian.mincea [Rezultate Obţinute] |
||
---|---|---|---|
Line 5: | Line 5: | ||
Proiectul isi propune implementarea unui joc de Sudoku. Controlul va fi facut dintr-o tastatura numerica ce va avea rolul de navigator prin puzzle (selectarea casutei) si de a introduce o cifra pentru completarea casutei. Afisarea puzzle-ului se va face pe un LCD. | Proiectul isi propune implementarea unui joc de Sudoku. Controlul va fi facut dintr-o tastatura numerica ce va avea rolul de navigator prin puzzle (selectarea casutei) si de a introduce o cifra pentru completarea casutei. Afisarea puzzle-ului se va face pe un LCD. | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
+ | |||
+ | Schema bloc | ||
{{:pm:prj2021:abirlica:schema_bloc_sudoku.png?200|Schema bloc}} | {{:pm:prj2021:abirlica:schema_bloc_sudoku.png?200|Schema bloc}} | ||
+ | |||
+ | Miscarea pe tabla de joc si introducerea numerelor se face folosind keypad-ul astfel: | ||
+ | * '2' - mutare cu o celula in sus | ||
+ | * '8' - mutare cu o celula in jos | ||
+ | * '4' - mutare cu o celula in stanga | ||
+ | * '6' - mutare cu o celula in dreapta | ||
+ | * '5' - selectarea celulei pentru introducerea valorii dorite | ||
+ | |||
+ | Dupa selectarea celulei se introduce un numar de la 1 la 6 dupa care jucatorul se poate misca din nou. | ||
+ | |||
+ | Butonul '#' declanseaza verificarea jocului. Se afiseaza un mesaj corespunzator starii in care se afla jocul, iar jucatorul are 2 posibilitati: | ||
+ | * New Game - se reseteaza tabla de joc si se completeaza cu un joc din cele 5 declarate static | ||
+ | * Continue - jucatorul reia jocul de unde a ramas | ||
+ | |||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Lista de piese: | Lista de piese: | ||
* Arduino Uno | * Arduino Uno | ||
- | * Ecran LCD SPI | + | * Ecran LCD 1.8\" SPI |
* Tastatura numerica 4x3 | * Tastatura numerica 4x3 | ||
- | * Breadborad | + | * Breadboard |
- | * Rezistente | + | * Rezistenta 1k - pentru pinul de LED+ al LCD-ului |
* Fire | * Fire | ||
Line 22: | Line 38: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Diagrama de activitati | ||
- | <note tip> | + | {{:pm:prj2021:abirlica:activity_diagram_sudoku.png?300|}} |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | ===== Rezultate Obţinute ===== | + | Diagrama de stari |
- | <note tip> | + | {{:pm:prj2021:abirlica:state_diagram_sudoku.png?300|}} |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | Functii: |
+ | * set_board() - initializeaza tabla de joc cu unul din cele 5 jocuri statice | ||
+ | * draw_sudoku() - deseneaza pe LCD tabla de joc, pozitia jucatorului fiind reprezentata prin culoarea rosu | ||
+ | * get_key() - Keypad.getKey(); functie de biblioteca pentru a verifica daca o tasta a fost apasata; functie neblocanta | ||
+ | * interpret_key() - se interpreteaza inputul utilizatorului in functie de starea jocului | ||
+ | * move si fill_cell sunt descrise in functia intepret_key() | ||
+ | * check_result() - se verifica starea jocului | ||
+ | * draw_menu - deseneaza meniul ce apare la apasarea tastei '#'; afiseaza un mesaj un functie de rezultatul verificarii si afiseaza optiunile de "NEW GAME" si "CONTINUE" | ||
- | ===== Download ===== | + | Biblioteci folosite: |
+ | * SPI.h si TFT.h - afisarea pe LCD | ||
+ | * Keypad.h - interpretarea inputului venit de la keypad | ||
- | <note warning> | + | ===== Rezultate Obţinute ===== |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Rezultatul obtinut este acela al unui joc sudoku 6x6 functional. |
- | </note> | + | |
+ | {{:pm:prj2021:abirlica:sudoku_layout.jpeg?300|}} | ||
+ | |||
+ | Link demo: https://ctipub-my.sharepoint.com/:v:/g/personal/lucian_mincea_stud_acs_upb_ro/EVdple31PT5FpDQ-qQWiFRABWQ4WvmL-MsfOVFpzQOP3rQ?e=CbELtV | ||
+ | |||
+ | Cod sursa: {{:pm:prj2021:abirlica:sudoku_pm.zip|}} | ||
+ | ===== Concluzii ===== | ||
- | ===== Jurnal ===== | + | Proiectul a presupus mai multe etape, alegerea temei fiind cea mai dificila si importanta prin prisma timpului alocat documentarii asupra elementelor de care dispunem pentru a pune cap la cap un proiect. |
+ | Ceea ce am invatat din acest proiect este lucrul cu biblioteca TFT si interactiunea cu un dispozitiv LCD ce este compatibil cu aceasta biblioteca. | ||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | Resurse: |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * https://www.arduino.cc/en/Reference/TFTLibrary |
- | </note> | + | * https://robojax.com/learn/arduino/?vid=robojax-keypad-4x3 |
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||