This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/24 12:52] alexandru.lintmaier [Hardware Design] |
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/28 12:33] (current) alexandru.lintmaier [Download] |
||
---|---|---|---|
Line 43: | Line 43: | ||
| Fire de conectare | Diverse | Conexiuni | | | Fire de conectare | Diverse | Conexiuni | | ||
- | Funcționalitate hardware & conexiuni | + | |
+ | **Funcționalitate hardware & conexiuni** | ||
1. Arduino UNO | 1. Arduino UNO | ||
Line 68: | Line 69: | ||
- | 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 85: | 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 94: | Line 96: | ||
<note tip> | <note tip> | ||
- | Medii și librării: | ||
- | Arduino IDE | + | **Biblioteci utilizate** |
- | Librărie LiquidCrystal_I2C pentru LCD | + | - LiquidCrystal_I2C.h: control LCD 16x2 prin I2C la adresa 0x27 |
- | TimerOne pentru contorizarea timpului | ||
- | EEPROM sau SD.h dacă se implementează salvare scoruri | + | **Structura software** |
+ | Programul este organizat în următoarele module functionale: | ||
- | Funcționalități software planificate: | + | 1. Inițializare (setup()) |
+ | - Configurare LCD și pini | ||
+ | - Crearea caracterelor personalizate pentru spânzurătoare | ||
+ | - Afișare mesaj de bun venit | ||
- | Interfață de navigare alfabet (cu accelerare la apăsare lungă) | + | 2. Selecția configurației (start()) |
+ | - Navigare prin categorii: Animale, Fructe, Țări, Aleator | ||
+ | - Selectare dificultate: Ușor, Mediu, Greu | ||
+ | - Alegerea aleatoare a cuvântului din setul corespunzător | ||
- | Afișare progres pe LCD (cu actualizări dinamice) | + | 3. Bucla principală (loop()) |
+ | - Gestionarea input-urilor de la butoane | ||
+ | - Navigarea prin alfabet (A-Z) | ||
+ | - Procesarea selecției de litere | ||
+ | - Actualizarea stării jocului | ||
- | Semnalizare stări cu LED RGB | + | 4. Afișare și feedback (drawGame(), drawHangman()) |
+ | - Desenarea progresului cuvântului | ||
+ | - Afișarea spânzurătorii progresive | ||
+ | - Feedback vizual/audio pentru acțiuni | ||
- | Cronometru integrat cu întreruperi | + | 5. Logica de joc (hasWon(), gameOver()) |
+ | - Verificarea condițiilor de victorie/înfrângere | ||
+ | - Gestionarea sfârșitului de joc și restart | ||
- | Niveluri de dificultate (opțional: număr de greșeli permise, lungimea cuvântului) | + | **Funcționalități implementate** |
- | Introducere nume utilizator pentru highscore (opțional) | + | - 4 categorii de cuvinte cu câte 6 cuvinte fiecare |
+ | - 3 niveluri de dificultate (2 cuvinte per nivel per categorie) | ||
+ | - Navigare prin alfabet cu butoane LEFT/RIGHT | ||
+ | - Selecție litere cu feedback audio/vizual | ||
+ | - Afișare progresivă a spânzurătorii (8 caractere personalizate) | ||
+ | - Contorizare greșeli (maximum 6) | ||
+ | - Detectare automată victorie/înfrângere | ||
+ | - Sistem de restart automat | ||
+ | - Debouncing software pentru butoane | ||
+ | |||
+ | **Algoritmi principali** | ||
+ | |||
+ | 1. Algoritm de navigare: | ||
+ | - Incrementare/decrementare ciclică prin alfabet (A-Z) | ||
+ | - Limitare la capetele intervalului | ||
+ | |||
+ | 2. Algoritm de verificare literă: | ||
+ | - Căutare în cuvântul țintă cu indexOf() | ||
+ | - Marcare literă ca ghicită în array boolean | ||
+ | - Actualizare progres și contorizare greșeli | ||
+ | |||
+ | 3. Algoritm de verificare victorie: | ||
+ | - Iterare prin toate literele cuvântului | ||
+ | - Verificare dacă toate sunt marcate ca ghicite | ||
+ | |||
+ | 4. Algoritm de afișare spânzurătoare: | ||
+ | - Afișare progresivă a 8 caractere personalizate | ||
+ | - Mapare numărul greșelilor la părțile corpului | ||
</note> | </note> | ||
Line 122: | Line 165: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Proiectul a fost implementat cu succes, oferind o experiență de joc interactivă și intuitivă. Sistemul funcționează stabil, cu timp de răspuns rapid la input-uri și feedback clar pentru utilizator. |
+ | |||
+ | Caracteristici finale: | ||
+ | - 24 de cuvinte organizate în 4 categorii | ||
+ | - 3 niveluri de dificultate funcționale | ||
+ | - Interface LCD clar și responsive | ||
+ | - Feedback audio/vizual consistent | ||
+ | - Sistem de restart automat functional | ||
+ | |||
+ | Îmbunătățiri posibile: | ||
+ | - Adăugarea unui card SD pentru cuvinte suplimentare | ||
+ | - Implementarea unui sistem de scoruri | ||
+ | - Timer pentru limitarea timpului de joc | ||
+ | - Mai multe categorii de cuvinte | ||
</note> | </note> | ||
===== 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> | ||