This shows you the differences between two versions of the page.
pm:prj2025:avaduva:diana_ioana.tudor [2025/04/30 11:10] diana_ioana.tudor created |
pm:prj2025:avaduva:diana_ioana.tudor [2025/05/25 19:31] (current) diana_ioana.tudor |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | <note important>Aceasta este structura recomandată pentru documentația de proiect de pe paginile voastre de wiki. Este o structură minimală, sunteți liberi să adăugați capitole/subcapitole dacă considerați că este nevoie. Vă rugăm ca toată documentația să fie scrisă în limba **Engleză** </note> | ||
- | |||
====== Sudoku ====== | ====== Sudoku ====== | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | <note tip> | + | Introducere |
- | Prezentarea pe scurt a proiectului vostru: | + | Acest proiect are ca scop realizarea unei versiuni fizice a jocului clasic Sudoku. Jocul va fi afișat pe un ecran LCD, navigarea printre celulele grilei se va face cu ajutorul unui joystick, iar introducerea numerelor se va realiza prin intermediul unui keypad. |
- | * ce face | + | |
- | * care este scopul lui | + | Obiectivul proiectului este de a crea o interfață interactivă și fizică pentru rezolvarea puzzle-urilor Sudoku, combinând elemente de programare, electronică și logică. |
- | * care a fost ideea de la care aţi pornit | + | |
- | * de ce credeţi că este util pentru alţii şi pentru voi | + | |
- | </note> | + | |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | <note tip> | + | Descriere generală |
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | Sudoku este un joc de logică ce presupune completarea unei grile de 9x9 cu cifre de la 1 la 9, respectând anumite reguli stricte: |
- | Exemplu de schemă bloc [[https://docs.google.com/drawings/d/1UpxRyJNfczJHhNRvWdeb5kh_7IEUy5173odk93W_GSA/edit?usp=sharing | aici]]. | + | Fiecare rând trebuie să conțină o singură dată cifrele de la 1 la 9. |
- | </note> | + | |
+ | Fiecare coloană trebuie să conțină o singură dată cifrele de la 1 la 9. | ||
+ | |||
+ | Fiecare bloc de 3x3 celule (regiune) trebuie să conțină toate cifrele de la 1 la 9, fără repetiții. | ||
+ | |||
+ | În cadrul proiectului, ecranul LCD are rolul de a afișa grila și cifrele corespunzătoare, oferind utilizatorului o experiență vizuală clară a jocului. Introducerea cifrelor se face cu ajutorul keypad-ului, iar joystick-ul permite deplasarea între celule pentru selectarea poziției dorite. | ||
+ | |||
+ | {{:pm:prj2025:avaduva:schemablockdianasudoku.jpg?400|}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | + | Lista componente |
- | Aici puneţi tot ce ţine de hardware design: | + | |
- | * listă de componente | + | |
- | * scheme electrice. Recomandăm să folosiți o aplicație dedicată pentru desenarea schemei electrice (KiCAD, Altium, Fusion360 etc.) sau, în cel mai rău caz, o diagramă desenată în Fritzing, Wokwi sau Tinkercad. | + | |
- | * diagrame de semnal | + | |
- | * rezultatele simulării din Wokwi sau Tinkercad (dacă este posibilă simularea). | + | |
- | </note> | + | |
+ | 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. [[ https://cleste.ro/ecran-lcd-1-8-spi.html|Ecran LCD 1.8” SPI]]\\ | ||
+ | 3. [[ https://www.emag.ro/tastatura-matriciala-4x4-ai183-s248/pd/D9SFNYMBM/?ref=cart_item |Tastatura numerica 4*4]]\\ | ||
+ | 4. [[ https://sigmanortec.ro/Modul-joystick-doua-axe-XY-p126458908 |Joystick]]\\ | ||
+ | 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\\ | ||
+ | |||
+ | Schema electrica:\\ | ||
+ | {{: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:** |
+ | * 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> | + | |