This shows you the differences between two versions of the page.
pm:prj2023:vstoica:sudoku [2023/05/21 17:10] maria_beatrice.dinu [Hardware design] |
pm:prj2023:vstoica:sudoku [2023/05/28 01:49] (current) maria_beatrice.dinu [Bibliografie/Resurse] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Sudoku ====== | ====== Sudoku ====== | ||
+ | |||
+ | Dinu Maria-Beatrice 332CA | ||
===== Introducere ===== | ===== Introducere ===== | ||
Proiectul consta in implementarea jocului clasic sudoku. Jocul va fi afisat pe un ecran LCD, miscarea pe ecran se va face printr-un joystick, iar numerele vor fi introduse printr-un keypad. | Proiectul consta in implementarea jocului clasic sudoku. Jocul va fi afisat pe un ecran LCD, miscarea pe ecran se va face printr-un joystick, iar numerele vor fi introduse printr-un keypad. | ||
+ | |||
+ | Scopul acestui proiect este sa creeze o interfata fizica si interactiva pentru rezolvarea puzzle-urilor Sudoku, fiind o combinatie interesanta intre programare, electronica si jocuri logice. | ||
===== Descriere generala ===== | ===== Descriere generala ===== | ||
Line 10: | Line 14: | ||
* Fiecare coloana din grila trebuie sa contina toate cifrele de la 1 la 9, fara repetitii. | * Fiecare coloana din grila trebuie sa contina toate cifrele de la 1 la 9, fara repetitii. | ||
* Fiecare regiune de 3x3 trebuie sa contina toate cifrele de la 1 la 9, fara repetitii. | * Fiecare regiune de 3x3 trebuie sa contina toate cifrele de la 1 la 9, fara repetitii. | ||
+ | |||
+ | Proiectul utilizeaza un ecran LCD pentru a afisa grila sudoku si cifrele asociate, permitand utilizatorului sa vada si sa interactioneze direct cu puzzle-ul. Keypad-ul este folosit pentru a introduce cifre in grila, iar joystick-ul pentru a naviga prin diferite celule ale grilei sudoku. | ||
{{:pm:prj2023:vstoica:schema_bloc_sudoku.png?500|Schema bloc}} | {{:pm:prj2023:vstoica:schema_bloc_sudoku.png?500|Schema bloc}} | ||
Line 20: | Line 26: | ||
- Tastatura numerica 4*4 | - Tastatura numerica 4*4 | ||
- Joystick | - Joystick | ||
- | - Placa de prototipare | + | - Breadboard 400 de puncte |
- Rezistente + fire | - Rezistente + fire | ||
Line 26: | Line 32: | ||
{{:pm:prj2023:vstoica:sudoku_schema.jpeg?500|Schema electrica}} | {{:pm:prj2023:vstoica:sudoku_schema.jpeg?500|Schema electrica}} | ||
+ | ===== Software design ===== | ||
+ | |||
+ | Codul a fost implementat in ArduinoIDE. M-am folosit de urmatoarele biblioteci: SPI.h si TFT.h pentru LCD, Keypad.h pentru keypad. | ||
+ | |||
+ | Structura codului: | ||
+ | - draw_sudoku(): deseneaza tabla, pozitia jucatorului si insereaza cifele asociate. | ||
+ | - draw_grid(): deseneaza liniile necesare pentru a imparti tabla in 9 segmente de 3x3. | ||
+ | - set_super_easy_board(): copiaza cea mai usoara tabla din start_boards (unde sunt initializate diferite table de joc) in sudoku_board (am lasat aceasta functie pentu a putea verifica mai repede anumite functionalitati, si sa nu trebuiasca sa completez un joc intreg de sudoku). | ||
+ | - set_easy_board(): copiaza o tabla de dificultate usoara random din start_boards (unde sunt initializate diferite table de joc) in sudoku_board. | ||
+ | - set_hard_board(): copiaza o tabla de dificultate grea random din start_boards (unde sunt initializate diferite table de joc) in sudoku_board. | ||
+ | - write_key(): insereaza cifra introdusa prin keypad pe tabla de joc. | ||
+ | - check_win(): se verifica daca solutia oferita este una valida. Daca jucatorul nu a completat toata tabla, se va afisa mesajul "NOT FINISHED!"/Daca jucatorul a completat gresit tabla se va afisa mesajul "TRY AGAIN!" pentru 3 secunde, dupa care se va reintoarce pe tabla de joc. Daca jucatorul a completat corect tabla, se va afisa mesajul "YOU WON! CONGRATS!" pentru 5 secunde, dupa care se va reintoarce la meniul principal. | ||
+ | - draw_menu(): deseneaza meniul principal unde jucatorul are optiunile de a alege intre un joc usor sau un joc greu. | ||
+ | |||
+ | {{:pm:prj2023:vstoica:schema_bloc_sudokuv2.png?400|Schema Stari}} | ||
+ | |||
+ | ===== Rezultate obtinute ===== | ||
+ | {{:pm:prj2023:vstoica:start_menu_sudoku.jpeg?150|Start menu}} | ||
+ | {{:pm:prj2023:vstoica:start_game_sudoku.jpeg?150|Start game}} | ||
+ | {{:pm:prj2023:vstoica:playing_game_sudoku.jpeg?150|Playing game}} | ||
+ | {{:pm:prj2023:vstoica:win_screen_sudoku.jpeg?150|Win screen}} | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | Proiectul a fost foarte interesant si captivant. Mi-a placut sa invat cum sa lucrez cu biblioteca TFT.h pentru LCD, care a durat ceva, si cum sa conectez componentele cu arduino astfel incat sa nu le stric :). Am lucrat la acest proiect cu placere. | ||
+ | |||
+ | ===== Download ===== | ||
+ | Surse: {{:pm:prj2023:vstoica:sudoku_arduino.zip|Sudoku arduino}} | ||
+ | |||
+ | ===== Bibliografie/Resurse ===== | ||
+ | https://randomnerdtutorials.com/guide-to-1-8-tft-display-with-arduino/ \\ | ||
+ | https://www.arduino.cc/reference/en/libraries/tft/ \\ | ||
+ | https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/ \\ | ||
+ | https://arduinogetstarted.com/tutorials/arduino-joystick | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<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> |