Proiectul realizat reprezintă o implementare a jocului clasic Sudoku, într-o versiune ce pune la dispoziția jucătorului o grilă de forma 4 x 4.
Jocul poate fi completat de un singur jucător la un moment dat, care va putea selecta pe rând poziția pe care o va scrie, precum și cifra pe care o va scrie pe această poziție. Scopul jocului presupune completarea întregii grile respectând următoarele limitări:
Progresul jucătorului va putea fi observat la orice moment de timp prin intermediul unui ecran LCD.
Jucătorul va avea la dispoziție 4 butoane pentru mișcările pe care le va face în cadrul grilei, pentru a ajunge pe poziția pe care dorește să o completeze (sus, jos, stânga, dreapta). Pe lângă cele acestea, va avea un buton ce incrementează o cifră la fiecare apăsare a acestuia, pornind de la 0, până la valoarea maximă 9. Cifra dorită va putea fi plasată pe grilă prin poziționarea pe căsuța corespunzătoare și, în final, apăsarea butonului SELECT. Acest buton va plasa cifra în grilă dacă aceasta reprezintă o variantă corectă de completare. În caz contrar, cifra nu va fi plasată în grilă și greșeala jucătorului va fi semnalată prin aprinderea unui led roșu și pornirea unui scurt semnal sonor.
Componenta | Numar | Link |
---|---|---|
Arduino Uno | 1 | Arduino |
Cablu USB | 1 | Cablu |
Breadboard | 1 | Breadboard |
LED | 1 | LED |
Ecran LCD | 1 | Ecran LCD |
Buzzer | 1 | Buzzer |
Butoane | 7 | Butoane |
Rezistente | 5 | Rezistente |
Fire | 30 | Fire |
Arduino IDE (1.8.15)
Ucglib → Folosită la afișarea pe ecran LCD
Funcția setup()
Funcția setup() generează grila de joc prin apelarea funcției resetGame(), care:
Grila este desenată din 4 linii verticale și 4 linii orizontale de culoare albă, suprapuse unui fundal negru. Numerele presetate în joc sunt scrise cu o culoare roșie pentru a se diferenția de restul și nu pot fi șterse pe parcursul jocului. Deplasarea pe căsuțele grilei este indicată prin colorarea în albastru a celulei curente.
Funția loop() verifică starea fiecărui buton (LOW = apăsat/ HIGH = liber) și decide pe baza acestuia, acțiunea executată.
La fiecare execuție a funcției loop, se verifică dacă jocul a ajuns la final. Dacă această condiție este îndeplinită, pe ecranul LCD se afișează mesajul “FELICITĂRI”, urmat de scorul final calculat pe parcursul sesiunii. În urma afișării acestui mesaj, jocul să se reia în formatul inițial prin apelarea funcției resetGame().
Combinarea design-ului hardware cu implementarea software a rezultat în obținerea unui joc de Sudoku, care respectă design-ul clasic și regulile jocului original. Acesta pune la dispoziția jucătorului toate funcționalitățile necesare (deplasarea în grila de joc, selectarea și scrierea numărului dorit) și, în plus față de jocul clasic, acesta dispune de un semnal de alarmă care se activează la încercarea de încălcare a regulilor. Pe parcusul jocului, se calculează scorul conform regulilor afișate inițial și se afișează la final rezultatul obținut.
✔ 25.aprilie - Alegere temă proiect
✔ 26.aprilie - Creare pagină wiki & schema bloc
✔ 27.aprilie - 5 mai - Achiziționare piese necesare
✔ 6.mai - Conectare ecran LCD
✔ 7.mai - 20 mai - Creare & Testare design software
✔ 22.mai
✔ 23.mai - 28.mai - Finalizare documentație wiki
✔ 29.mai