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> | ||