This shows you the differences between two versions of the page.
|
pm:prj2025:rnedelcu:catalin.aldobritei [2025/05/24 18:24] catalin.aldobritei [Hardware Design] |
pm:prj2025:rnedelcu:catalin.aldobritei [2025/05/28 12:38] (current) catalin.aldobritei [Software Design] |
||
|---|---|---|---|
| Line 102: | Line 102: | ||
| <note tip> | <note tip> | ||
| - | Descrierea codului aplicaţiei (firmware): | + | Mediu de dezvoltare: Arduino IDE |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | Librarii: LiquidCrystal_I2C.h |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
| - | * (etapa 3) surse şi funcţii implementate | + | |
| + | Structuri si algoritmi: | ||
| + | |||
| + | State machine cu stari: diffSelect, gameOver, selectMode pentru controlul fluxului de executie | ||
| + | |||
| + | Timer non-blocking bazat pe millis() pentru countdown-ul in timp real | ||
| + | |||
| + | Debouncing software cu interval de 300ms pentru stabilitatea butoanelor si prevenirea apasarilor multiple | ||
| + | |||
| + | Algoritm de construire progresiva a numarului (cifra cu cifra) adaptat pe dificultate: | ||
| + | |||
| + | Easy (1-10): doar unitati | ||
| + | |||
| + | Medium (1-100): zeci + unitati | ||
| + | |||
| + | Hard (1-1000): sute + zeci + unitati | ||
| + | |||
| + | |||
| + | Generator aleator pentru randomizare cu randomSeed | ||
| + | |||
| + | Sistem de feedback audio adaptat cu frecvente variabile bazate pe proximitatea ghicirii | ||
| + | |||
| + | PWM si tone() pentru controlul buzzer-ului si generarea tonurilor | ||
| + | |||
| + | Algoritm de verificare cu feedback directional (prea mic/prea mare) | ||
| + | |||
| + | Sistem de proximitate inteligent cu praguri adaptive in functie de dificultate | ||
| + | |||
| + | Functii implementate: | ||
| + | |||
| + | setup() – initializare hardware si configurare pin-uri | ||
| + | |||
| + | loop() – bucla principala cu gestionarea starilor | ||
| + | |||
| + | handleDiffSelect() – gestioneaza selectia si confirmarea nivelului de dificultate | ||
| + | |||
| + | initGame() – seteaza parametrii specifici dificultatii (limite, timp, pozitii cifre) | ||
| + | |||
| + | checkTime() – monitorizeaza timer-ul si actualizeaza display-ul in timp real | ||
| + | |||
| + | checkGuess() – compara numarul introdus cu cel ales random si ofera feedback | ||
| + | |||
| + | resetGuess() – reseteaza starea pentru o noua incercare fara restart complet | ||
| + | |||
| + | timeUp() – gestioneaza sfarsitul jocului cand timpul expira | ||
| + | |||
| + | showDiffMenu() – afiseaza meniul principal de selectare dificultate | ||
| + | |||
| + | showDiff() – afiseaza dificultatea curenta selectata | ||
| + | |||
| + | proximitySound() – calculeaza si reproduce feedback audio bazat pe distanta pana la raspuns | ||
| + | |||
| + | winSound() – melodie de victorie cu tonuri crescatoare | ||
| + | |||
| + | failSound() – sunet de esec cu tonuri descrescatoare | ||
| + | |||
| + | quickBeep(), shortBeep(), confirmBeep() – feedback audio pentru actiuni utilizator | ||
| </note> | </note> | ||
| Line 112: | Line 168: | ||
| <note tip> | <note tip> | ||
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Proiectul și-a atins toate obiectivele, creând un joc fara probleme. |
| + | |||
| + | |||
| + | |||
| + | |||
| + | Limitări identificate: | ||
| + | |||
| + | -Lipsa persistenței datelor la restart (scoruri, statistici) | ||
| + | |||
| + | -Feedback audio limitat la un singur buzzer (monoton) | ||
| + | |||
| + | -Interface fixă fără personalizare pentru utilizatori | ||
| + | |||
| + | -Dependența de alimentarea externă (fără baterie) | ||
| + | |||
| + | |||
| + | Ce mai poate fi adaugat: | ||
| + | |||
| + | -LED RGB pentru efecte vizuale mai complexe în loc de LED-urile simple | ||
| + | |||
| + | -Card SD pentru salvarea scorurilor și statisticilor de joc | ||
| + | |||
| + | -Mod Multiplayer - doi jucători alternează | ||
| + | |||
| + | -Mod Sprint - ghicește cât mai multe numere în timp limitat | ||
| </note> | </note> | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| + | Proiectul a fost finalizat cu succes, demonstrând funcționarea stabilă a tuturor componentelor și modulelor implementate. Experiența de dezvoltare a oferit cunoștințe practice în programarea Arduino și integrarea sistemelor embedded. | ||
| + | Rezultatele obținute confirmă eficiența soluțiilor adoptate pentru realizarea jocului. | ||
| ===== 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ă ;-). | + | Arhiva {{:pm:prj2025:rnedelcu:guessthenumber.zip|}} |
| - | + | ||
| - | 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**. | + | |
| </note> | </note> | ||