This is an old revision of the document!


Pixel Pet

Introducere

Pixel Pet este un joc interactiv în care utilizatorul îngrijește un animal virtual, hrănindu-l și jucându-se cu el. Starea pet-ului este reflectată printr-un LED RGB și transmisă prin consola serială. Scopul este de a crea un pet virtual cu care utilizatorii pot interacționa, folosind tehnici de programare pe microcontrolere, cum ar fi întreruperile, PWM și UART. Ideea a fost inspirată de jocurile de tip Tamagotchi, folosind componentele disponibile. Proiectul ajută la înțelegerea programării pe microcontrolere și interacțiunea hardware-software.

Descriere generală

Proiectul se bazeaza pe 3 componente principale:

  • Intreruperi: Detectarea apăsării butoanelor pentru a interacționa cu pet-ul.
  • PWM: Controlul unui LED RGB pentru a reflecta starea animalului (fericit/trist).
  • UART: Comunicarea cu utilizatorul prin consola serială pentru mesaje de stare și comenzi de interacțiune.

Modul de interacțiune:

  • Butoanele sunt conectate la pinii de întrerupere ai microcontrolerului, iar la apăsarea acestora se activează întreruperile care modifică starea pet-ului.
  • LED-ul RGB este controlat prin PWM pentru a reflecta starea pet-ului (verde pentru fericire, roșu pentru tristețe).
  • Comunicarea serială prin UART permite utilizatorului să trimită comenzi pentru hrănire sau joacă și vizualizează starea pet-ului.

Hardware Design

Lista de piese:

  • Microcontroler: Arduino UNO
  • 1 buton
  • 2 LED-uri RGB
  • Display Nokia 5110
  • fire tata-tata
  • 2 rezistori

Software Design

Descrierea codului aplicaţiei (firmware):

  • Mediu de dezvoltare:
    1. IDE: Arduino IDE
    2. Limbaj de programare: C++
  • Librării şi surse 3rd-party:
    • *SPI.h - Librărie standard Arduino pentru comunicare SPI 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 * Algoritmi şi structuri implementatate: ### Algoritmi principali #### Sistemul de management al nevoilor - 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ă #### Sisteme de animație - Animație de dans: Deplasează pisica pe axa Y într-o mișcare oscilantă - 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 #### Sistem de indicare vizuală a stării prin LED-uri - LED verde: Indică stare de satisfacție completă, aprins când nivelul de foame este 0% - LED roșu: Indică stare de foame critică, aprins când nivelul de foame depășește 70% #### Sistem de interacțiune - Interacțiune hardware: Utilizează un buton fizic pentru hrănirea animalului - Interacțiune software: Acceptă comenzi prin interfața serială pentru activarea diverselor animații și funcții * Funcţii implementate: #### Funcții principale - `setup()`: Inițializează componentele hardware, afișează mesaje de bun venit, configurează pinii pentru LED-uri și buton - `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ă - `checkButton()`: Verifică starea butonului cu debounce pentru a evita citirile false - `checkHungry()`: Actualizează nivelul de foame și generează mesaje de avertizare - `updateLedStatus()`: Controlează starea LED-urilor în funcție de nivelul de foame #### Funcții de afișare - `drawCat()`: Desenează sprite-ul pisicii și informațiile de stare pe ecran - `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 * Structura datelor: - Bitmap-uri pentru sprite-uri: Definite ca array-uri de bytes pentru reprezentarea vizuală a pisicii, inimilor și mâncării - Variabile de stare: Utilizate pentru a urmări poziția obiectelor, nivelul de foame, starea butonului, etc. - Variabile de temporizare: Folosite pentru sincronizarea animațiilor și actualizărilor </note> ===== Rezultate Obţinute ===== <note tip> Care au fost rezultatele obţinute în urma realizării proiectului vostru. </note> ===== Concluzii ===== ===== Download ===== <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. </note> ===== Jurnal ===== <note tip> Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. </note> ===== Bibliografie/Resurse ===== <note> Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware**.

Export to PDF

pm/prj2025/rnedelcu/alexandra.londraliu.1747723190.txt.gz · Last modified: 2025/05/20 09:39 by alexandra.londraliu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0