This shows you the differences between two versions of the page.
|
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/24 12:53] alexandru.lintmaier [Hardware 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 96: | 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 124: | 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> | ||