Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/24 12:56]
alexandru.lintmaier [Software Design]
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/28 12:33] (current)
alexandru.lintmaier [Download]
Line 44: Line 44:
  
  
-===== Funcționalitate hardware & conexiuni ​=====+**Funcționalitate hardware & conexiuni**
  
 1. Arduino UNO 1. Arduino UNO
Line 70: Line 70:
  
  
-===== Tabel cu alocarea pinilor ​=====+**Tabel cu alocarea pinilor**
  
 | Pin Arduino | Funcție | Nume Reg. MCU | Direcție | Motiv alegere | | Pin Arduino | Funcție | Nume Reg. MCU | Direcție | Motiv alegere |
Line 87: Line 87:
 {{:​pm:​prj2025:​rnedelcu:​tinkercad4.png?​200|}} {{:​pm:​prj2025:​rnedelcu:​tinkercad4.png?​200|}}
  
-{{:​pm:​prj2025:​rnedelcu:​poza_proiect.jpg?200|}}+{{:​pm:​prj2025:​rnedelcu:​pozaa.jpg?200|}}
  
  
Line 99: Line 99:
 **Biblioteci utilizate** **Biblioteci utilizate**
  
-- Wire.h: comunicare I2C cu LCD-ul +  ​- LiquidCrystal_I2C.h:​ control LCD 16x2 prin I2C la adresa 0x27
-- LiquidCrystal_I2C.h:​ control LCD 16x2 prin I2C la adresa 0x27+
  
  
Line 107: Line 106:
  
 1. Inițializare (setup()) 1. Inițializare (setup())
-   - Configurare LCD și pini +  ​- Configurare LCD și pini 
-   ​- Crearea caracterelor personalizate pentru spânzurătoare +  - Crearea caracterelor personalizate pentru spânzurătoare 
-   ​- Afișare mesaj de bun venit+  - Afișare mesaj de bun venit
  
 2. Selecția configurației (start()) 2. Selecția configurației (start())
-   - Navigare prin categorii: Animale, Fructe, Țări, Aleator +  ​- Navigare prin categorii: Animale, Fructe, Țări, Aleator 
-   ​- Selectare dificultate:​ Ușor, Mediu, Greu +  - Selectare dificultate:​ Ușor, Mediu, Greu 
-   ​- Alegerea aleatoare a cuvântului din setul corespunzător+  - Alegerea aleatoare a cuvântului din setul corespunzător
  
 3. Bucla principală (loop()) 3. Bucla principală (loop())
-   - Gestionarea input-urilor de la butoane +  ​- Gestionarea input-urilor de la butoane 
-   ​- Navigarea prin alfabet (A-Z) +  - Navigarea prin alfabet (A-Z) 
-   ​- Procesarea selecției de litere +  - Procesarea selecției de litere 
-   ​- Actualizarea stării jocului+  - Actualizarea stării jocului
  
 4. Afișare și feedback (drawGame(),​ drawHangman()) 4. Afișare și feedback (drawGame(),​ drawHangman())
-   - Desenarea progresului cuvântului +  ​- Desenarea progresului cuvântului 
-   ​- Afișarea spânzurătorii progresive +  - Afișarea spânzurătorii progresive 
-   ​- Feedback vizual/​audio pentru acțiuni+  - Feedback vizual/​audio pentru acțiuni
  
 5. Logica de joc (hasWon(), gameOver()) 5. Logica de joc (hasWon(), gameOver())
-   - Verificarea condițiilor de victorie/​înfrângere +  ​- Verificarea condițiilor de victorie/​înfrângere 
-   ​- Gestionarea sfârșitului de joc și restart +  - Gestionarea sfârșitului de joc și restart 
-   - +
 **Funcționalități implementate** **Funcționalități implementate**
  
-- 4 categorii de cuvinte cu câte 6 cuvinte fiecare +  ​- 4 categorii de cuvinte cu câte 6 cuvinte fiecare 
-- 3 niveluri de dificultate (2 cuvinte per nivel per categorie) +  - 3 niveluri de dificultate (2 cuvinte per nivel per categorie) 
-- Navigare prin alfabet cu butoane LEFT/​RIGHT +  - Navigare prin alfabet cu butoane LEFT/​RIGHT 
-- Selecție litere cu feedback audio/​vizual +  - Selecție litere cu feedback audio/​vizual 
-- Afișare progresivă a spânzurătorii (8 caractere personalizate) +  - Afișare progresivă a spânzurătorii (8 caractere personalizate) 
-- Contorizare greșeli (maximum 6) +  - Contorizare greșeli (maximum 6) 
-- Detectare automată victorie/​înfrângere +  - Detectare automată victorie/​înfrângere 
-- Sistem de restart automat +  - Sistem de restart automat 
-- Debouncing software pentru butoane+  - Debouncing software pentru butoane
  
 **Algoritmi principali** **Algoritmi principali**
  
 1. Algoritm de navigare: 1. Algoritm de navigare:
-   - Incrementare/​decrementare ciclică prin alfabet (A-Z) +  ​- Incrementare/​decrementare ciclică prin alfabet (A-Z) 
-   ​- Limitare la capetele intervalului+  - Limitare la capetele intervalului
  
 2. Algoritm de verificare literă: 2. Algoritm de verificare literă:
-   - Căutare în cuvântul țintă cu indexOf() +  ​- Căutare în cuvântul țintă cu indexOf() 
-   ​- Marcare literă ca ghicită în array boolean +  - Marcare literă ca ghicită în array boolean 
-   ​- Actualizare progres și contorizare greșeli+  - Actualizare progres și contorizare greșeli
  
 3. Algoritm de verificare victorie: 3. Algoritm de verificare victorie:
-   - Iterare prin toate literele cuvântului +  ​- Iterare prin toate literele cuvântului 
-   ​- Verificare dacă toate sunt marcate ca ghicite+  - Verificare dacă toate sunt marcate ca ghicite
  
 4. Algoritm de afișare spânzurătoare:​ 4. Algoritm de afișare spânzurătoare:​
-   - Afișare progresivă a 8 caractere personalizate +  ​- Afișare progresivă a 8 caractere personalizate 
-   ​- Mapare numărul greșelilor la părțile corpului+  - Mapare numărul greșelilor la părțile corpului
 </​note>​ </​note>​
  
Line 184: Line 183:
 ===== Concluzii ===== ===== Concluzii =====
  
 +Proiectul a demonstrat cu succes implementarea unui joc interactiv pe platformă Arduino, combinând multiple concepte de programare embedded: interfațarea I2C, gestionarea input-urilor,​ generarea de sunete și crearea unei interfețe utilizator intuitive.
 +
 +Aspectele cele mai valoroase ale implementării:​
 +- Utilizarea eficientă a caracterelor personalizate LCD pentru grafică
 +- Organizarea modulară a codului pentru ușurință în dezvoltare
 +- Implementarea unui sistem de feedback multi-modal (vizual/​audio)
 +- Gestionarea corectă a stărilor de joc și tranziților
 +
 +Proiectul oferă o bază solidă pentru dezvoltarea ulterioară și poate fi extins cu funcționalități suplimentare cum ar fi conectivitate,​ scoruri online sau AI pentru generarea dinamică de cuvinte.
 ===== Download ===== ===== 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ă ;-). 
  
-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**.+Arhiva 
 +{{:pm:prj2025:rnedelcu:spanzuratoarea.zip|}}  
 </​note>​ </​note>​
  
pm/prj2025/rnedelcu/alexandru.lintmaier.1748080562.txt.gz · Last modified: 2025/05/24 12:56 by alexandru.lintmaier
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