This is an old revision of the document!


Sudoku

Autor: Mincea Lucian (336CB)

Introducere

Proiectul isi propune implementarea unui joc de Sudoku. Controlul va fi facut dintr-o tastatura numerica ce va avea rolul de navigator prin puzzle (selectarea casutei) si de a introduce o cifra pentru completarea casutei. Afisarea puzzle-ului se va face pe un LCD.

Descriere generală

Schema bloc

Schema bloc

Miscarea pe tabla de joc si introducerea numerelor se face folosind keypad-ul astfel:

  • '2' - mutare cu o celula in sus
  • '8' - mutare cu o celula in jos
  • '4' - mutare cu o celula in stanga
  • '6' - mutare cu o celula in dreapta
  • '5' - selectarea celulei pentru introducerea valorii dorite

Dupa selectarea celulei se introduce un numar de la 1 la 6 dupa care jucatorul se poate misca din nou.

Butonul '#' declanseaza verificarea jocului. Se afiseaza un mesaj corespunzator starii in care se afla jocul, iar jucatorul are 2 posibilitati:

  • New Game - se reseteaza tabla de joc si se completeaza cu un joc din cele 5 declarate static
  • Continue - jucatorul reia jocul de unde a ramas

Hardware Design

Lista de piese:

  • Arduino Uno
  • Ecran LCD SPI
  • Tastatura numerica 4×3
  • Breadborad
  • Rezistente
  • Fire

Schema electrica:

Software Design

Diagrama de activitati

Diagrama de stari

Functii:

  • set_board() - initializeaza tabla de joc cu unul din cele 5 jocuri statice
  • draw_sudoku() - deseneaza pe LCD tabla de joc, pozitia jucatorului fiind reprezentata prin culoarea rosu
  • get_key() - Keypad.getKey(); functie de biblioteca pentru a verifica daca o tasta a fost apasata; functie neblocanta
  • interpret_key() - se interpreteaza inputul utilizatorului in functie de starea jocului
  • move si fill_cell sunt descrise in functia intepret_key()
  • check_result() - se verifica starea jocului
  • draw_menu - deseneaza meniul ce apare la apasarea tastei '#'; afiseaza un mesaj un functie de rezultatul verificarii si afiseaza optiunile de “NEW GAME” si “CONTINUE”

Biblioteci folosite:

  • SPI.h si TFT.h - afisarea pe LCD
  • Keypad.h - interpretarea inputului venit de la keypad

Rezultate Obţinute

Concluzii

Proiectul a presupus mai multe etape, alegerea temei fiind cea mai dificila si importanta prin prisma timpului alocat documentarii asupra elementelor de care dispunem pentru pune cap la cap un proiect. Ceea ce am invatat din acest proiect este lucrul cu biblioteca TFT si interactiunea cu un dispozitiv LCD ce este compatibil cu aceasta biblioteca.

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2021/abirlica/sudoku.1622312049.txt.gz · Last modified: 2021/05/29 21:14 by lucian.mincea
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