This shows you the differences between two versions of the page.
pm:prj2024:rvirtan:sudoku [2024/05/16 21:00] alicuriceanu [Software Design] |
pm:prj2024:rvirtan:sudoku [2024/05/20 16:07] (current) alicuriceanu [Decizii luate] |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <note tip> | ||
+ | * Nume: Alexandru Licuriceanu | ||
+ | * Grupa: 332CD | ||
+ | </note> | ||
+ | |||
====== Sudoku ====== | ====== Sudoku ====== | ||
{{ :pm:prj2024:rvirtan:header_sudoku.png?800 |}} | {{ :pm:prj2024:rvirtan:header_sudoku.png?800 |}} | ||
Line 12: | Line 17: | ||
* Tabla de joc este o grila de 9x9 celule, impartita in subgrile de 3x3. | * Tabla de joc este o grila de 9x9 celule, impartita in subgrile de 3x3. | ||
* O celula poate tine o cifra de la 1 la 9. | * O celula poate tine o cifra de la 1 la 9. | ||
- | * Toate cifrele dintr-o subgrila trebuie sa fie diferite. | + | * Toate cifrele dintr-o subgrila trebuie sa fie distincte. |
* Toate cifrele de pe un rand trebuie sa fie distincte. | * Toate cifrele de pe un rand trebuie sa fie distincte. | ||
* Toate cifrele de pe o coloana trebuie sa fie distincte. | * Toate cifrele de pe o coloana trebuie sa fie distincte. | ||
Line 33: | Line 38: | ||
==== Schema electrica ==== | ==== Schema electrica ==== | ||
{{ :pm:prj2024:rvirtan:sudoku_schema_electrica.png?700 |}} | {{ :pm:prj2024:rvirtan:sudoku_schema_electrica.png?700 |}} | ||
+ | |||
+ | ==== Decizii luate ==== | ||
+ | * Pentru ecranul LCD, am ales sa pun VCC la 5V pentru alimentare, iar pe LED l-am pus la pinul D6 pentru a regla luminozitatea ecranului folosind PWM. Am conectat restul pinilor conform datasheet-ului ecranului. | ||
+ | * Pentru VRX si VRY ale joystick-ului, puteam sa aleg oricare doi pini analogici, si le-am legat la A0 si A1, ground la ground si VCC la 5V. | ||
+ | * Pentru tastatura, la fel, aveam de ales oricare 4 pini digitali si 4 pini analogici. | ||
+ | |||
+ | ==== Imagini ==== | ||
+ | {{:pm:prj2024:rvirtan:sudoku_image5.jpeg?300}} {{:pm:prj2024:rvirtan:sudoku_image6.jpeg?300}} | ||
+ | |||
+ | |||
===== Software Design ===== | ===== Software Design ===== | ||
Line 44: | Line 59: | ||
* Pentru a reda grafici pe ecran, am scris functiile **draw_start_menu**, **draw_grid**, **draw_subgrids**, **draw_cursor** care deseneaza meniul de start, grila principala de 3x3, celulele si respectiv cursorul. | * Pentru a reda grafici pe ecran, am scris functiile **draw_start_menu**, **draw_grid**, **draw_subgrids**, **draw_cursor** care deseneaza meniul de start, grila principala de 3x3, celulele si respectiv cursorul. | ||
- | * Functia **select_board** copiaza in tabla activa, o tabla din lista de table de joc predefinite. | + | * Functia **select_board** copiaza in tabla activa, o tabla dintr-o lista predefinita. Am ales sa pun si o tabla suplimentara care are doar doua celule libere, pentru a testa functiile scrise. |
* Functia **read_joystick** citeste valorile trimise de joystick si muta cursorul in directia specificata cat timp nu iese din tabla de joc. | * Functia **read_joystick** citeste valorile trimise de joystick si muta cursorul in directia specificata cat timp nu iese din tabla de joc. | ||
* Functia **write_digit** scrie in tabla de joc activa cifra care a fost introdusa de jucator. Tasta '0' sterge o cifra dintr-o celula care nu este fixa. | * Functia **write_digit** scrie in tabla de joc activa cifra care a fost introdusa de jucator. Tasta '0' sterge o cifra dintr-o celula care nu este fixa. | ||
Line 52: | Line 67: | ||
* Pentru a cronometra timpul de la inceputul jocului si pana la castigarea acestuia, am folosit timer-ul intern al microcontroller-ului. Prin functia **millis** am calculat diferenta de timp intre fiecare executie a functiei **loop** iar la final am scazut momentul de start din momentul curent, pentru a calcula durata totala. | * Pentru a cronometra timpul de la inceputul jocului si pana la castigarea acestuia, am folosit timer-ul intern al microcontroller-ului. Prin functia **millis** am calculat diferenta de timp intre fiecare executie a functiei **loop** iar la final am scazut momentul de start din momentul curent, pentru a calcula durata totala. | ||
- | ==== Download ==== | + | |
- | * {{:pm:prj2024:rvirtan:pmsudoku.zip|}} | + | |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | Rezultatul proiectului este un dispozitiv hand-held pe care se poate juca Sudoku. | ||
- | <note tip> | + | {{:pm:prj2024:rvirtan:sudoku_image1.jpeg?300|}} |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | {{:pm:prj2024:rvirtan:sudoku_image2.jpeg?300|}} |
- | </note> | + | |
+ | {{:pm:prj2024:rvirtan:sudoku_image4.jpeg?300|}} | ||
+ | {{:pm:prj2024:rvirtan:sudoku_image3.jpeg?300|}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | + | * Proiectul a fost interesant de realizat, am invatat sa lucrez cu functiile din bibliotecile pentru LCD si keypad, dar si cum sa aranjez componentele astfel incat la final sa am un produs functional si util. Pe partea de software, provocarea a fost sa scriu cod care ocupa cat mai putin spatiu, dar in acelasi timp sa fie calitatativ si lizibil. | |
- | ===== Download ===== | + | ==== Download ==== |
- | + | * {{:pm:prj2024:rvirtan:pmsudoku.zip|}} | |
- | <note warning> | + | |
- | 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**. | + | |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 77: | Line 89: | ||
* 29/04/2024 - Pagina de wiki initiala. | * 29/04/2024 - Pagina de wiki initiala. | ||
* 09/05/2024 - Hardware design. | * 09/05/2024 - Hardware design. | ||
+ | * 16/05/2024 - Software design. | ||
+ | * 18/05/2024 - Finalizare pagina. | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * Desenare de forme, text pe ecran: https://www.arduino.cc/reference/en/libraries/tft/ |
+ | * Conectarea ecranului: https://youtu.be/boagCpb6DgY?si=3Q-0dxi9h8yn5iBe | ||
+ | * Utilizarea tastaturii numerice: https://arduinogetstarted.com/tutorials/arduino-keypad | ||
+ | * Utilizarea joystick-ului: https://arduinogetstarted.com/tutorials/arduino-joystick | ||
</note> | </note> | ||