This shows you the differences between two versions of the page.
|
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/24 12:56] alexandru.lintmaier [Hardware Design] |
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/28 12:33] (current) alexandru.lintmaier [Download] |
||
|---|---|---|---|
| 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> | ||