This shows you the differences between two versions of the page.
pm:prj2024:rpascale:darius.calota [2024/05/15 02:24] darius.calota [Descriere generală] |
pm:prj2024:rpascale:darius.calota [2024/05/21 23:33] (current) darius.calota [Software Design] |
||
---|---|---|---|
Line 11: | Line 11: | ||
* Scorul va fi afișat în partea dreaptă sus. | * Scorul va fi afișat în partea dreaptă sus. | ||
- | <note tip> | + | Astfel, utilizatorul va apasa butonul ori de câte ori doreste ca personajul sa efectueze o saritura. Saritura se realizeaza in momentul intalnirii unui obstacol, inainte de potentialul contact cu acesta. |
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | |
+ | {{:pm:prj2024:rpascale:initial_diagram.png?800|}} | ||
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | ||
- | </note> | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | Listă de piese: | ||
+ | * Arduino UNO | ||
+ | * Fire de lagatura | ||
+ | * Breadboard | ||
+ | * Switch | ||
+ | * LCD 1602 | ||
+ | * Cablu USB pentru alimentarea UNO | ||
+ | |||
+ | Schema electrică: | ||
+ | |||
+ | {{:pm:prj2024:rpascale:schema.png?700|700}} | ||
+ | |||
+ | Pini utilizați: | ||
+ | Arduino Uno: | ||
+ | * GND (GND.1): Conectat la pinul VSS al LCD-ului pentru a furniza legătură la masă (GND). | ||
+ | * 5V: Conectat la pinul VDD al LCD-ului pentru a furniza alimentare la 5V. | ||
+ | * Pin 9 (E): Conectat la pinul E (Enable) al LCD-ului pentru controlul modului de execuție. | ||
+ | * Pin 10 (RW): Conectat la pinul RW (Read/Write) al LCD-ului pentru controlul direcției de scriere. | ||
+ | * Pin 11 (RS): Conectat la pinul RS (Register Select) al LCD-ului pentru a selecta între date și instrucțiuni. | ||
+ | * Pin 12 (V0): Conectat la pinul V0 al LCD-ului pentru a controla contrastul afișajului. | ||
+ | * Pin 6 (D4): Conectat la pinul D4 al LCD-ului pentru comunicația în modul 4-bit. | ||
+ | * Pin 5 (D5): Conectat la pinul D5 al LCD-ului pentru comunicația în modul 4-bit. | ||
+ | * Pin 4 (D6): Conectat la pinul D6 al LCD-ului pentru comunicația în modul 4-bit. | ||
+ | * Pin 3 (D7): Conectat la pinul D7 al LCD-ului pentru comunicația în modul 4-bit. | ||
+ | * Pin 2: Conectat la butonul pushbutton pentru a detecta apăsarea butonului. | ||
+ | |||
+ | LCD 1602: | ||
+ | * VSS: Conectat la GND al Arduino Uno pentru a furniza legătură la masă (GND). | ||
+ | * VDD: Conectat la 5V al Arduino Uno pentru a furniza alimentare la 5V. | ||
+ | * E (Enable): Conectat la pinul 9 al Arduino Uno pentru controlul modului de execuție. | ||
+ | * RW (Read/Write): Conectat la pinul 10 al Arduino Uno pentru controlul direcției de scriere. | ||
+ | * RS (Register Select): Conectat la pinul 11 al Arduino Uno pentru a selecta între date și instrucțiuni. | ||
+ | * V0: Conectat la pinul 12 al Arduino Uno pentru a controla contrastul afișajului. | ||
+ | * D4, D5, D6, D7: Conectate la pinii 6, 5, 4 și 3 ai Arduino Uno pentru comunicația în modul 4-bit. | ||
+ | |||
+ | Buton: | ||
+ | * 1.l: Conectat la pinul 2 al Arduino Uno pentru a detecta apăsarea butonului. | ||
+ | * 2.l: Conectat la GND al Arduino Uno pentru a furniza legătură la masă (GND). | ||
+ | |||
- | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | ||
- | * listă de piese | ||
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | ||
- | * diagrame de semnal | ||
- | * rezultatele simulării | ||
- | </note> | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Mediu de Dezvoltare: | ||
+ | Codul aplicației este dezvoltat folosind Arduino IDE. | ||
+ | |||
+ | Librării și Surse 3rd-Party: | ||
+ | Codul utilizează biblioteca standard LiquidCrystal.h, care facilitează interacțiunea cu afișajele LCD bazate pe controlere HD44780. Aceasta permite controlul ecranului pentru a afișa caractere și grafică personalizată. | ||
+ | |||
+ | Algoritmi și Structuri Implementate: | ||
+ | Aplicația implementează un joc simplu de tip runner, unde jucătorul controlează un erou ce se deplasează printr-un teren care se derulează continuu de la dreapta la stânga. Principalele componente ale algoritmului includ: | ||
+ | * Inițializarea Graficii: Funcția initializeGraphics() definește și încarcă caractere personalizate pentru afișajul LCD, utilizând funcția lcd.createChar() pentru a crea sprite-uri pentru erou și teren. | ||
+ | * Avansarea Terenului: Funcția advanceTerrain() deplasează terenul cu o unitate spre stânga, ajustând caracterele pentru a simula mișcarea continuă a terenului. | ||
+ | * Desenarea Eroului: Funcția drawHero() gestionează afișarea eroului în diferite poziții (alergare, săritură) și detectează coliziunile cu terenul. | ||
+ | * Gestionarea Interacțiunilor: Funcția buttonPush() tratează apăsările de buton folosind întreruperi hardware pentru a declanșa salturi ale eroului. În funcția loop(), starea jocului este actualizată continuu, avansând terenul, schimbând poziția eroului și verificând coliziunile. Jocul reîncepe atunci când este detectată o coliziune. | ||
+ | * Controlul Jocului: Folosind variabile statice pentru a menține starea jocului între iterațiile buclei principale, jocul este controlat printr-o serie de stări și tranziții care determină acțiunile eroului și actualizarea ecranului. | ||
+ | |||
+ | Surse și Funcții Implementate: | ||
+ | * initializeGraphics(): Definește caracterele personalizate pentru erou și teren și inițializează matricele de teren. | ||
+ | * advanceTerrain(char terrain, byte newTerrain) : Actualizează matricele de teren prin deplasarea conținutului spre stânga și adăugarea de noi elemente la capătul din dreapta. | ||
+ | * drawHero(byte position, char terrainUpper, char terrainLower, unsigned int score): Desenează eroul în poziția sa actuală și verifică coliziunile cu terenul. Afișează și scorul curent pe ecranul LCD. | ||
+ | * buttonPush(): Setează un flag atunci când butonul este apăsat, utilizat pentru a declanșa saltul eroului. | ||
+ | * setup(): Configurarea inițială a pinilor, afișajului LCD și întreruperilor hardware. | ||
+ | * loop(): Buclează continuu pentru a actualiza starea jocului, incluzând avansarea terenului, gestionarea poziției eroului și verificarea coliziunilor. De asemenea, gestionează starea de așteptare înainte de începerea unui nou joc. | ||
+ | |||
- | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | ||
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | ||
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | ||
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | ||
- | * (etapa 3) surse şi funcţii implementate | ||
- | </note> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== |