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
Software Design
Descrierea codului aplicaţiei (firmware):
mediu de dezvoltare: Arduino IDE
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
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
Mini-joc “Prinde Șoriceii”:
- 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ă
- Algoritm de detecție a coliziunilor: Verifică distanța relativă între pisică și șoricel pentru determinarea prinderii
- Sistem de punctaj: Acordă puncte pentru fiecare șoricel prins și monitorizează progresul
- Control dual cu butoane: Folosește 2 butoane fizice pentru mișcarea pisicii pe axa X în timpul jocului
Funcții principale
- setup(): Inițializează componentele hardware, afișează mesaje de bun venit, configurează pinii pentru LED-uri și butoane
- loop(): Buclă principală care verifică comenzile, butoanele, actualizează nivelul de foame și gestionează modul de joc
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 joc
- startGame(): Inițializează variabilele de joc și pornește mini-jocul “Prinde Șoricii”
- runMouseGame(): Gestionează logica principală a jocului (mișcarea șoricelului, verificarea coliziunilor)
- checkGameButtons(): Procesează input-ul de la butoanele de control ale jocului cu debounce
- spawnNewMouse(): Generează un nou șoricel pe o poziție aleatorie și crește progresiv viteza
- checkCollision(): Verifică dacă pisica a prins șoricelul bazat pe pozițiile relative
- handleGameWon()/handleGameLost(): Gestionează stările de sfârșit de joc
- endGame(): Închide jocul și oferă recompense pisicii bazate pe performanță
- updateGameDisplay(): Actualizează afișajul specific pentru modul de joc
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 în modul normal
- handleAnimations(): Gestionează toate tipurile de animații (dans, alergare, hrănire)
Rezultate Obţinute
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%
Rezultat Final:
Tamagotchi funcțional cu 7 comenzi, 3 butoane, mini-joc interactiv și gestionare completă a stării animalului virtual!
Concluzii
Jurnal
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
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
Export to PDF