• Nume: Alexandru Licuriceanu
  • Grupa: 332CD

Sudoku

Introducere

Proiectul propune implementarea jocului Sudoku pe un microcontroller Arduino, redat pe un display LCD. Jucatorul se va putea misca intre celule folosind un joystick, iar cifrele vor fi introduse folosind o tastatura numerica.

Scopul proiectului este de a imbina cunostinte hardware si software, dar si de a crea un joc lejer, de tip puzzle care iti testeaza abilitatile logice.

Descriere generală

Jocul de Sudoku, in forma clasica, are urmatoarele reguli:

  • Tabla de joc este o grila de 9×9 celule, impartita in subgrile de 3×3.
  • O celula poate tine o cifra de la 1 la 9.
  • Toate cifrele dintr-o subgrila trebuie sa fie distincte.
  • Toate cifrele de pe un rand trebuie sa fie distincte.
  • Toate cifrele de pe o coloana trebuie sa fie distincte.
  • Initial, jocul pleaca de la o grila completata partial (anumite celule contin deja cifre) iar jucatorul nu le poate schimba pe acestea.
  • Un Sudoku este considerat complet atunci cand toate celulele contin cate o cifra si toate regulile jocului sunt respectate.

Jucatorul va naviga intre celule folosind joystick-ul si le va scrie o cifra in celula folosind tastatura numerica. Pe ecranul LCD se va afisa grila jocului.

Hardware Design

Lista de piese

  • Microcontroller Arduino Nano (ATmega328P).
  • Ecran 1.8” LCD (128×160).
  • Joystick.
  • Tastatura numerica 4×4.
  • Breadboard, rezistori, fire.

Schema electrica

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

sudoku_image5.jpeg sudoku_image6.jpeg

Software Design

Diagrama de Flux

Implementare

  • Ca mediu de dezvoltare, am lucrat in Arduino IDE.
  • Pentru a controla mai usor functionalitatile perifericelor, am folosit bibliotecile 3rd-party TFT.h, SPI.h pentru ecranul LCD si Keypad.h pentru tastatura numerica.
  • 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 3×3, celulele si respectiv cursorul.
  • 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 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.
  • In final, check_board verifica daca tabla de joc activa este completa si respecta toate regulile jocului.
  • 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.

Rezultate Obţinute

Rezultatul proiectului este un dispozitiv hand-held pe care se poate juca Sudoku.

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

Jurnal

  • 22/04/2024 - Alegerea proiectului, aprobare.
  • 23/04/2024 - Comandarea componentelor.
  • 29/04/2024 - Pagina de wiki initiala.
  • 09/05/2024 - Hardware design.
  • 16/05/2024 - Software design.
  • 18/05/2024 - Finalizare pagina.

Bibliografie/Resurse

pm/prj2024/rvirtan/sudoku.txt · Last modified: 2024/05/20 16:07 by alicuriceanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0