This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:alexandra.londraliu [2025/05/20 09:39] alexandra.londraliu [Software Design] |
pm:prj2025:rnedelcu:alexandra.londraliu [2025/05/27 16:15] (current) alexandra.londraliu [Download] |
||
---|---|---|---|
Line 22: | Line 22: | ||
Lista de piese: | Lista de piese: | ||
* Microcontroler: Arduino UNO | * Microcontroler: Arduino UNO | ||
- | * 1 buton | + | * 3 butoane |
* 2 LED-uri RGB | * 2 LED-uri RGB | ||
* Display Nokia 5110 | * Display Nokia 5110 | ||
Line 30: | Line 30: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | |||
- | |||
<note tip> | <note tip> | ||
Descrierea codului aplicaţiei (firmware): | Descrierea codului aplicaţiei (firmware): | ||
- | * Mediu de dezvoltare: | + | * mediu de dezvoltare: Arduino IDE |
- | -IDE: Arduino IDE | + | * Limbaj de programare: C++ |
- | -Limbaj de programare: C++ | + | * librării şi surse 3rd-party: |
- | * Librării şi surse 3rd-party: | + | - SPI.h - Librărie standard Arduino pentru comunicare SPI |
- | **SPI.h** - Librărie standard Arduino pentru comunicare SPI | + | - Adafruit_GFX.h - Librărie grafică pentru afișaje, dezvoltată de Adafruit |
- | **Adafruit_GFX.h** - Librărie grafică pentru afișaje, dezvoltată de Adafruit | + | - Adafruit_PCD8544.h - Librărie specifică pentru controlul afișajului Nokia 5110 (PCD8544), dezvoltată de Adafruit |
- | **Adafruit_PCD8544.h** - Librărie specifică pentru controlul afișajului Nokia 5110 (PCD8544), dezvoltată de Adafruit | + | * algoritmi principali: |
- | * Algoritmi şi structuri implementatate: | + | - Sistemul de management al nevoilor: |
- | ### Algoritmi principali | + | -- Algoritm de foame: Nivelul de foame crește gradual în timp (5% la fiecare 30 secunde) |
- | + | -- Algoritm de hrănire: Activat de un buton fizic, reduce nivelul de foame cu 20% pentru fiecare hrănire completă | |
- | #### Sistemul de management al nevoilor | + | - Sisteme de animație |
- | - **Algoritm de foame:** Nivelul de foame crește gradual în timp (5% la fiecare 30 secunde) | + | -- Animație de dans: Deplasează pisica pe axa Y într-o mișcare oscilantă |
- | - **Algoritm de hrănire:** Activat de un buton fizic, reduce nivelul de foame cu 20% pentru fiecare hrănire completă | + | -- Animație de alergare: Mișcă pisica pe axa X cu revenire pe partea stângă a ecranului când depășește marginea dreaptă |
- | + | -- Animație de hrănire: Simulează hrănirea prin căderea obiectului "mâncare" de la partea superioară a ecranului către poziția pisicii | |
- | #### Sisteme de animație | + | - Sistem de indicare vizuală a stării prin LED-uri |
- | - **Animație de dans:** Deplasează pisica pe axa Y într-o mișcare oscilantă | + | -- LED verde: Indică stare de satisfacție completă, aprins când nivelul de foame este 0% |
- | - **Animație de alergare:** Mișcă pisica pe axa X cu revenire pe partea stângă a ecranului când depășește marginea dreaptă | + | -- LED roșu: Indică stare de foame critică, aprins când nivelul de foame depășește 70% |
- | - **Animație de hrănire:** Simulează hrănirea prin căderea obiectului "mâncare" de la partea superioară a ecranului către poziția pisicii | + | - Sistem de interacțiune |
- | + | -- Interacțiune hardware: Utilizează un buton fizic pentru hrănirea animalului | |
- | #### Sistem de indicare vizuală a stării prin LED-uri | + | -- Interacțiune software: Acceptă comenzi prin interfața serială pentru activarea diverselor animații și funcții |
- | - **LED verde:** Indică stare de satisfacție completă, aprins când nivelul de foame este 0% | + | - Mini-joc "Prinde Șoriceii": |
- | - **LED roșu:** Indică stare de foame critică, aprins când nivelul de foame depășește 70% | + | -- Algoritm de control al jocului: Sistem de stare pentru gestionarea fazelor de joc (în desfășurare, câștigat, pierdut) |
- | + | -- Algoritm de mișcare a șoricelului: Deplasare pe axa Y cu viteză progresivă crescândă | |
- | #### Sistem de interacțiune | + | -- Algoritm de detecție a coliziunilor: Verifică distanța relativă între pisică și șoricel pentru determinarea prinderii |
- | - **Interacțiune hardware:** Utilizează un buton fizic pentru hrănirea animalului | + | -- Sistem de punctaj: Acordă puncte pentru fiecare șoricel prins și monitorizează progresul |
- | - **Interacțiune software:** Acceptă comenzi prin interfața serială pentru activarea diverselor animații și funcții | + | -- Control dual cu butoane: Folosește 2 butoane fizice pentru mișcarea pisicii pe axa X în timpul jocului |
- | + | * funcţii implementate: | |
- | * Funcţii implementate: | + | - Funcții principale |
- | #### Funcții principale | + | -- setup(): Inițializează componentele hardware, afișează mesaje de bun venit, configurează pinii pentru LED-uri și butoane |
- | - `setup()`: Inițializează componentele hardware, afișează mesaje de bun venit, configurează pinii pentru LED-uri și buton | + | -- loop(): Buclă principală care verifică comenzile, butoanele, actualizează nivelul de foame și gestionează modul de joc |
- | - `loop()`: Buclă principală care verifică comenzile, butonul, actualizează nivelul de foame și starea LED-urilor | + | - Funcții de verificare și procesare |
- | + | -- checkCommands(): Verifică și procesează comenzile primite prin interfața serială | |
- | #### Funcții de verificare și procesare | + | -- checkButton(): Verifică starea butonului cu debounce pentru a evita citirile false |
- | - `checkCommands()`: Verifică și procesează comenzile primite prin interfața serială | + | -- checkHungry(): Actualizează nivelul de foame și generează mesaje de avertizare |
- | - `checkButton()`: Verifică starea butonului cu debounce pentru a evita citirile false | + | -- updateLedStatus(): Controlează starea LED-urilor în funcție de nivelul de foame |
- | - `checkHungry()`: Actualizează nivelul de foame și generează mesaje de avertizare | + | - Funcții de joc |
- | - `updateLedStatus()`: Controlează starea LED-urilor în funcție de nivelul de foame | + | -- startGame(): Inițializează variabilele de joc și pornește mini-jocul "Prinde Șoricii" |
- | + | -- runMouseGame(): Gestionează logica principală a jocului (mișcarea șoricelului, verificarea coliziunilor) | |
- | #### Funcții de afișare | + | -- checkGameButtons(): Procesează input-ul de la butoanele de control ale jocului cu debounce |
- | - `drawCat()`: Desenează sprite-ul pisicii și informațiile de stare pe ecran | + | -- spawnNewMouse(): Generează un nou șoricel pe o poziție aleatorie și crește progresiv viteza |
- | - `drawHearts()`: Desenează inimi decorative animate (opțional) | + | -- checkCollision(): Verifică dacă pisica a prins șoricelul bazat pe pozițiile relative |
- | - `drawFood()`: Desenează obiectul "mâncare" în timpul procesului de hrănire | + | -- handleGameWon()/handleGameLost(): Gestionează stările de sfârșit de joc |
- | - `updateDisplay()`: Actualizează întregul conținut al afișajului | + | -- endGame(): Închide jocul și oferă recompense pisicii bazate pe performanță |
- | * Structura datelor: | + | -- updateGameDisplay(): Actualizează afișajul specific pentru modul de joc |
- | - **Bitmap-uri pentru sprite-uri:** Definite ca array-uri de bytes pentru reprezentarea vizuală a pisicii, inimilor și mâncării | + | - Funcții de afișare |
- | - **Variabile de stare:** Utilizate pentru a urmări poziția obiectelor, nivelul de foame, starea butonului, etc. | + | -- drawCat(): Desenează sprite-ul pisicii și informațiile de stare pe ecran |
- | - **Variabile de temporizare:** Folosite pentru sincronizarea animațiilor și actualizărilor | + | -- drawHearts(): Desenează inimi decorative animate (opțional) |
+ | -- drawFood(): Desenează obiectul "mâncare" în timpul procesului de hrănire | ||
+ | -- updateDisplay(): Actualizează întregul conținut al afișajului în modul normal | ||
+ | -- handleAnimations(): Gestionează toate tipurile de animații (dans, alergare, hrănire) | ||
</note> | </note> | ||
+ | ===== Rezultate Obţinute ===== | ||
+ | <note tip> | ||
+ | Rezultate Obținute: | ||
+ | Funcționalități Implementate: | ||
+ | * Animal virtual complet: pisică interactivă cu sistem de foame | ||
+ | * Hrănire prin buton: reduce foamea cu 20% | ||
+ | * Animații multiple - dans, alergare, hrănire | ||
+ | * Mini-joc "Prinde Șoarecii" - cu 2 butoane de control | ||
+ | * Feedback vizual - LED verde/roșu + afișaj Nokia 5110 | ||
+ | * Control dual - comenzi seriale + butoane fizice | ||
+ | Performanță Tehnică: | ||
+ | * Memorie optimizată - funcționează pe Arduino Uno | ||
+ | * Interfață responsivă - debouncing 50ms pentru butoane | ||
+ | * Update automat - foame +5% la 30 secunde | ||
+ | * Sistem de recompense - jocul reduce foamea cu 40% | ||
- | ===== Rezultate Obţinute ===== | + | Rezultat Final: |
- | + | Tamagotchi funcțional cu 7 comenzi, 3 butoane, mini-joc interactiv și gestionare completă a stării animalului virtual!</note> | |
- | <note tip> | + | |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== 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ă ;-). | + | {{:pm:prj2025:rnedelcu:alexandra_londraliu.zip|}}===== Download ===== |
- | 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> | ||
Line 106: | Line 116: | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 12.05: am primit comanda cu piesele necesare |
+ | * 13.05: este gata o parte din hardware | ||
+ | * 16.05: am ars lcd-ul si am dat comanda de altul | ||
+ | * 18.05: am facut rost de alt lcd | ||
+ | * 20.05: gata o parte din software | ||
+ | * 22.05: gata software & hardware | ||
+ | * 25.05: am infrumusetat aspectul vizual al proiectului | ||
</note> | </note> | ||