This shows you the differences between two versions of the page.
pm:prj2025:avaduva:diana_ioana.tudor [2025/05/18 20:51] diana_ioana.tudor |
pm:prj2025:avaduva:diana_ioana.tudor [2025/05/25 19:31] (current) diana_ioana.tudor |
||
---|---|---|---|
Line 6: | Line 6: | ||
Obiectivul proiectului este de a crea o interfață interactivă și fizică pentru rezolvarea puzzle-urilor Sudoku, combinând elemente de programare, electronică și logică. | Obiectivul proiectului este de a crea o interfață interactivă și fizică pentru rezolvarea puzzle-urilor Sudoku, combinând elemente de programare, electronică și logică. | ||
+ | |||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 27: | Line 28: | ||
Lista componente | Lista componente | ||
- | 1. Arduino UNO\\ | + | 1. [[https://www.optimusdigital.ro/en/compatibile-with-arduino-uno/1678-placa-de-dezvoltare-compatibila-cu-arduino-uno-atmega328p-i-ch340.html?gad_source=1&gad_campaignid=19615979487&gbraid=0AAAAADv-p3DpzQivl1HoGD6feRIlY_6Bz&gclid=Cj0KCQjwiqbBBhCAARIsAJSfZkaSUVWAxmtEcNMAdON4gNs-nMCVe17ofrzLc7nHWMQuIMM6dL4Q0goaAgaWEALw_wcB|Arduino UNO]]\\ |
- | 2. Ecran LCD 1.8” SPI\\ | + | 2. [[ https://cleste.ro/ecran-lcd-1-8-spi.html|Ecran LCD 1.8” SPI]]\\ |
- | 3. Tastatura numerica 4*4\\ | + | 3. [[ https://www.emag.ro/tastatura-matriciala-4x4-ai183-s248/pd/D9SFNYMBM/?ref=cart_item |Tastatura numerica 4*4]]\\ |
- | 4. Joystick\\ | + | 4. [[ https://sigmanortec.ro/Modul-joystick-doua-axe-XY-p126458908 |Joystick]]\\ |
- | 5. Breadboard 400 de puncte\\ | + | 5. [[https://sigmanortec.ro/Breadboard-400-puncte-p129872825?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=22174019478&gbraid=0AAAAAC3W72NZq-0hyN7i8IMNtn3PmizFF&gclid=Cj0KCQjwiqbBBhCAARIsAJSfZkbD8aa2tWwoiCwLyPc8EnUO3BfdVyjavFcvzeFps8h206heRO1GXaYaAvxnEALw_wcB |Breadboard 400 de puncte]]\\ |
6. Rezistente + fire\\ | 6. Rezistente + fire\\ | ||
- | Schema electrica: | + | Schema electrica:\\ |
- | {{:pm:prj2025:avaduva:sudoku_schema_electrica_diana_tudor.jpg?400|}} | + | {{:pm:prj2025:avaduva:sudoku_schema_electrica_diana_tudor.jpeg?400|}} |
===== Software Design ===== | ===== Software Design ===== | ||
- | <note tip> | + | Pentru realizarea componentei software am folosit mediul de dezvoltare Arduino IDE. Aplicatia este un joc de** Sudoku** care ruleaza pe un microcontroler si foloseste un **ecran TFT**, **un joystick analogic** si** o tastatura 4x4**. |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, PlatformIO) | + | |
- | * biblioteci şi surse 3rd-party folosite (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 ===== | + | **Biblioteci folosite:** |
- | {{:pm:prj2025:avaduva:pozasudokufunc.jpg?400|}} | + | * SPI.h – pentru comunicarea cu ecranul TFT. |
+ | * TFT.h – pentru desenarea interfetei grafice. | ||
+ | * Keypad.h – pentru detectarea tastelor apasate pe tastatura matriciala. | ||
- | <note tip> | + | Structura codului si functiile folosite: |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | *** 1. Initializare componente (in setup())** |
+ | Se configureaza joystick-ul, tastatura si ecranul TFT. Se calculeaza dimensiunea fiecarei celule (cellWidth, cellHeight) in functie de rezolutia ecranului. Se apeleaza functia drawMainMenu() pentru a afisa meniul principal. | ||
- | ===== Cod sursă și alte resurse ce trebuie să existe pe GitHub ===== | + | * **2. Meniu principal (functia drawMainMenu())** |
+ | Afiseaza pe ecran titlul "SUDOKU" si instructiuni: | ||
+ | * A pentru joc usor, | ||
+ | * B pentru joc greu, | ||
+ | * C pentru super usor (tabla aproape completa), | ||
+ | * * pentru verificarea jocului, | ||
+ | * # pentru revenire in meniu. | ||
- | Codul sursă trebuie urcat într-un repo public, recomandăm GitHub. | + | * **3. Incarcarea tablei de joc (functia loadBoard(index))** |
+ | Incarca o tabla predefinita din predefinedBoards[index]. Marcheaza celulele care nu pot fi modificate (fixedCells[]). Initializeaza variabila filledCells. Apeleaza drawSudokuGrid() si drawBoldGridLines() pentru afisare. | ||
- | <note warning> | + | * **4. Afisarea tablei Sudoku:** |
- | Structurați-vă pagina de GitHub a proiectului pe mai multe directoare. De exemplu, creați un director numit **src** în care țineți tot codul sursă. Alt director **hardware** în care să țineți schemele și diagramele și alt director numit **images** în care să puneți toate fotografiile cu proiectul vostru, pe care le link-ați în README.md | + | - drawSudokuGrid() |
+ | Deseneaza fiecare celula. | ||
+ | Daca are o valoare, o afiseaza (text alb). | ||
+ | Evidentiaza celula selectata cu un chenar rosu. | ||
+ | - drawBoldGridLines() | ||
+ | Deseneaza liniile groase pentru a marca fiecare subgrila 3x3. | ||
+ | |||
+ | * **5. Navigare si interactiune (in loop())** | ||
+ | Citeste pozitia joystick-ului (analogRead(X) si analogRead(Y)) si modifica selectedRow / selectedCol. Daca utilizatorul apasa o tasta intre 1 si 9, se apeleaza writeToCell(key). | ||
+ | |||
+ | * **6. Introducere cifre (functia writeToCell(key))** | ||
+ | Verifica daca celula este editabila (fixedCells). Daca da, salveaza cifra si coloreaza celula pentru a arata ca a fost modificata. | ||
+ | |||
+ | * **7. Validarea jocului (functia validateBoard())** | ||
+ | Daca tabla nu este completata (filledCells < TOTAL_CELLS), afiseaza mesajul "NOT FINISHED!". Daca este completata, verifica: toate liniile, toate coloanele, toate subgrilele 3x3. | ||
+ | |||
+ | Daca totul e corect, afiseaza "YOU WON!". Daca sunt greseli, afiseaza "TRY AGAIN!". In toate cazurile, dupa afisarea mesajului se redeseneaza tabla (drawSudokuGrid() si drawBoldGridLines()). | ||
+ | |||
+ | * **8. Revenire in meniu (functia resetToMenu())** | ||
+ | Reseteaza valorile de stare (isInMenu, selectedRow, filledCells, etc.). Curata ecranul si afiseaza din nou meniul (drawMainMenu()), unde codul este deja optimizat: | ||
+ | |||
+ | **Optimizari posibile:** | ||
+ | Debounce pentru joystick – ar reduce miscarile involuntare. | ||
+ | Butonul joystick-ului (joystickButtonPin) nu este folosit – ar putea fi adaugata o functie de stergere celula. | ||
+ | Feedback vizual pentru greseli – se pot colora celulele incorecte. | ||
+ | Verificare in timp real – pentru a preveni introducerea cifrelor care incalca regulile. | ||
+ | Oprire mai devreme la validare – algoritmul verifica tot jocul chiar daca gaseste o greseala; se poate optimiza. | ||
+ | |||
+ | **Notiuni din laborator aplicate:** | ||
+ | * SPI – pentru comunicarea cu ecranul TFT. | ||
+ | * ADC – pentru joystick (citirea valorilor analogice). | ||
+ | * GPIO – pentru tastatura si butoane. | ||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | {{:pm:prj2025:avaduva:pozasudokufunc.jpeg?400|}} | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | * Proiectul arata ca poti construi o aplicatie interactiva completa pe un microcontroler, combinand afisaj grafic, control cu joystick si tastatura. | ||
- | Pagina de GitHub a proiectului vostru trebuie să conțină **toate** fișierele relevante pentru realizarea proiectului vostru. Dacă există resurse externe pe care le-ați folosit, vă rugăm să le link-ați în README.md | + | * Jocul ofera o experienta placuta si intuitiva. |
- | </note> | + | |
- | <note warning> | + | * Sudoku-ul este verificat automat, ceea ce implica o logica bine gandita si o coordonare clara intre input si afisaj. |
- | Sunteți încurajați să filmați un demo cu proiectul vostru și să îl încărcați pe YouTube. Faceți embed la video în README.md și în pagina de wiki OCW a proiectului vostru. | + | |
- | </note> | + | |
- | ===== Jurnal ===== | + | * M-am distrat :) |
- | <note tip> | + | ===== Cod sursă ===== |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | {{:pm:prj2025:avaduva:sudoku_diana_ioana_tudor.zip|Link download}} |
- | </note> | + | |
- | ===== Bibliografie/Resurse ===== | + | [[https://youtube.com/shorts/4xpqb9nj9Rw?feature=share|Link Demo]] |
- | <note> | + | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | |