This shows you the differences between two versions of the page.
pm:prj2025:czlatea:andrei.ignat [2025/05/18 13:16] andrei.ignat [Rezultate Obţinute] |
pm:prj2025:czlatea:andrei.ignat [2025/05/25 19:24] (current) andrei.ignat [Rezultate Obţinute] |
||
---|---|---|---|
Line 108: | Line 108: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | |||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | Bibliotecile folosite: |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | 1. <SPI.h> |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | Motivație: |
- | * (etapa 3) surse şi funcţii implementate | + | Biblioteca SPI.h este necesară deoarece ecranul TFT utilizează protocolul de comunicare SPI (Serial Peripheral Interface) pentru transmiterea datelor. |
+ | |||
+ | Rol: | ||
+ | Asigură comunicarea rapidă și eficientă între microcontroller (de exemplu, Arduino) și display. | ||
+ | |||
+ | 2. <Adafruit_GFX.h> | ||
+ | Motivație: | ||
+ | Biblioteca Adafruit_GFX oferă o interfață grafică generală pentru desene, texte, forme și linii, compatibilă cu o gamă largă de display-uri. | ||
+ | |||
+ | Rol: | ||
+ | Oferă funcții pentru desenarea de linii, dreptunghiuri, texte etc. | ||
+ | Abstractizează partea grafică, permițând o codare simplificată și portabilă. | ||
+ | |||
+ | Exemplu de utilizare: | ||
+ | drawRect, drawLine, setCursor, print, setTextColor, etc. | ||
+ | |||
+ | 3. <Adafruit_ST7735.h> | ||
+ | Motivație: | ||
+ | Această bibliotecă este specifică pentru controlul display-urilor TFT care folosesc driverul ST7735, foarte popular în proiectele cu Arduino. | ||
+ | |||
+ | Rol: | ||
+ | Inițializează ecranul TFT. | ||
+ | Controlează afișajul color și dimensiunile acestuia. | ||
+ | Se integrează perfect cu Adafruit_GFX pentru redarea conținutului grafic. | ||
+ | |||
+ | void drawStartScreen() | ||
+ | Ce face: | ||
+ | Afișează pe ecran meniul de start, unde utilizatorul poate alege între „Vs Bot” și „Vs Player”. | ||
+ | |||
+ | Detalii: | ||
+ | |||
+ | Evidențiază opțiunea selectată cu un chenar roșu. | ||
+ | Afișează instrucțiuni pentru butoane: Select = schimbă opțiunea, OK = start joc. | ||
+ | |||
+ | void drawWinnerScreen(int winner) | ||
+ | Ce face: | ||
+ | Afișează un ecran de final cu rezultatul jocului: „X câștigă”, „O câștigă” sau „Remiză”. | ||
+ | |||
+ | Detalii: | ||
+ | Schimbă culoarea textului în verde pentru câștigător. | ||
+ | Afișează instrucțiuni pentru a relua jocul. | ||
+ | |||
+ | void drawBoard() | ||
+ | Ce face: | ||
+ | Desenează tabla de joc (3x3) și plasează X sau O în funcție de mutările făcute. | ||
+ | |||
+ | Detalii: | ||
+ | Desenează liniile care împart ecranul în 9 pătrate. | ||
+ | Evidențiază pătratul selectat cu un chenar galben. | ||
+ | Desenează „X” cu roșu și „O” cu albastru în pătratele ocupate. | ||
+ | |||
+ | int checkWinner() | ||
+ | Ce face: | ||
+ | Verifică dacă există un câștigător sau remiză. | ||
+ | |||
+ | Returnează: | ||
+ | 1 → dacă X a câștigat | ||
+ | 2 → dacă O a câștigat | ||
+ | 3 → dacă e remiză (tabla e plină) | ||
+ | 0 → jocul continuă | ||
+ | |||
+ | void botMove() | ||
+ | Ce face: | ||
+ | Realizează o mutare automată pentru bot (jucătorul O). | ||
+ | |||
+ | Strategie: | ||
+ | Verifică dacă botul poate câștiga → joacă acolo. | ||
+ | Dacă nu, verifică dacă trebuie să blocheze X → blochează. | ||
+ | Dacă nu, joacă pe poziții preferate (mijloc, colțuri etc). | ||
+ | Include: feedback sonor și redesenarea tablei. | ||
+ | |||
+ | void resetGame() | ||
+ | Ce face: | ||
+ | Resetează toate variabilele pentru a începe un nou joc. | ||
+ | |||
+ | Detalii: | ||
+ | Șterge tabla (board[]), resetează jucătorul și indicatorii (gameOver, winner). | ||
+ | Apelează drawBoard() pentru a afișa o tablă goală. | ||
+ | |||
+ | void setup() | ||
+ | Ce face: | ||
+ | Este apelată o singură dată la pornirea plăcii Arduino. | ||
+ | |||
+ | Inițializează: | ||
+ | Pinurile pentru butoane și buzzere. | ||
+ | Ecranul TFT (rotire, modul de inițializare). | ||
+ | Afișează ecranul de start (drawStartScreen()). | ||
+ | |||
+ | void loop() | ||
+ | Ce face: | ||
+ | Este funcția care rulează în buclă continuu și gestionează logica principală a jocului. | ||
+ | |||
+ | Structură logică: | ||
+ | Dacă jocul nu a început: permite selectarea modului de joc. | ||
+ | Dacă jocul s-a terminat: permite revenirea la ecranul de start. | ||
+ | Dacă jocul e activ: | ||
+ | Citire buton SELECT → mută cursorul pe tablă. | ||
+ | Citire buton OK → plasează X sau O. | ||
+ | Verifică dacă există câștigător sau remiză. | ||
+ | Dacă e modul Vs Bot și e rândul lui → apelează botMove(). | ||
+ | |||
+ | |||
+ | În proiectul Tic-Tac-Toe cu ecran TFT și butoane, optimizările au fost realizate pentru a îmbunătăți: | ||
+ | -Viteza de reacție și claritatea interfeței | ||
+ | -Ușurința în utilizare | ||
+ | -Citirea clară a codului | ||
+ | -Reducerea resurselor folosite (memorie, sunete inutile etc. | ||
+ | |||
+ | |||
</note> | </note> | ||
Line 122: | Line 233: | ||
<note tip> | <note tip> | ||
Rezultate obținute in proiect. | Rezultate obținute in proiect. | ||
- | https://youtube.com/shorts/gUEhmS1PZkU?feature=share | + | https://youtube.com/shorts/mDymTbDc0fk?si=P2lqlXAzB6K4TqPN |
</note> | </note> | ||
- | ===== Concluzii ===== | ||
- | |||
- | ===== Download ===== | ||
<note warning> | <note warning> | ||
- | 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ă ;-). | + | Schelet de cod |
- | + | {{:pm:prj2025:czlatea:pm1.zip|}} | |
- | 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**. | + | |
</note> | </note> | ||