Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:arosca:darian.vrabie [2022/04/21 22:44]
darian.vrabie created
pm:prj2022:arosca:darian.vrabie [2022/05/24 02:12] (current)
darian.vrabie
Line 1: Line 1:
 ====== Retro Racing Game ====== ====== Retro Racing Game ======
 ===== Introducere ===== ===== Introducere =====
 +   * Proiectul va consta intr-un joc similar cu cel gasit pe consolele retro de tip 9999 games in 1. Mai exact, jocul cu masini, in care jucatorul controleaza o masina si trebuie sa evite ciocnirea cu alte masini, ce vin pe contrasens.
 +===== Descriere generala =====
 +   * Jocul are 2 "​caractere":​ masina controlata de jucator, care se afla in partea inferioara a matricei de LED-uri, si masinile ce vin de pe partea opusa. Scopul jocului este simplu: nu te ciocni cu celelalte masini pentru cat mai mult timp.
 +{{:​pm:​prj2022:​arosca:​diag_gen.png?​700|}}
 +===== Implementare Hardware =====
 +Componentele necesare:
 +    * Arduino UNO
 +    * 8x8=64 LED-uri ​   ​
 +    * breadboard
 +    * shift registers, pentru multiplexarea LED-urilor
 +    * butoane, rezistente, fire, the usual stuff
 +    * <​del>​LCD pentru scor</​del>​ time constraints,​ procrastination and broken dreams
  
-<note tip> +Descriere implementare hardware 
-    Proiectul va consta intr-un joc similar gasit cu cel pe consolele retro de tip 9999 games in 1Mai exactjocul cu masini, in care jucatorul controleaza ​masina si trebuie sa evite ciocnirea cu alte masinice vin din fataViteza cu care masinile ce trebuie evitate apar pe ecran creste gradualjocul devenind ​din ce in ce mai greu. Implementarea NU se va face pe un ecran LCDci se va folosi o matrice de becuri LEDFiecare LED va reprezenta un pixel al "​ecranului"​. Pentru matricea ​de LED-uri se vor folosi ​shift register iar pentru ​afisarea scorului se va folosi un ecran LCD 1602 +<note tip>Stiati ca breadboard-urile au conexiuni comune intre gaurile de pe aceeasi coloana numerica?  
-</​note>​+Am aflat prea tarziu. :​^)</​note>​ 
 +   * Datorita intrebarii retorice ​de mai sus, partea hardware a proiectului functioneaza ​in felul urmator: 
 +        * Exista 4 linii de cate 8x2=16 led-uri fiecareLed-urile de pe fiecare linie sunt inseriate la anod. 
 +        * Catodurile led-urilor sunt inseriate (short-ate?​) pe orizontalade la linie la altaformand astfel 8 coloane. 
 +        * Astfeldaca conectam prima coloana la GND si prima linie la VCC, se aprind primele 2 LED-uri (din moment ​ce sunt inseriatecele 2 LED-uri aprinse ​se numara ca unul singur in software). 
 +        * Aprinderea unui anumit set de led-uri de pe anumite randuri si anumite coloane ​se face cu ajutorul a doua shift-registere (de tip Serial Input Paralel Output, SIPO). 
 +        * Un shift registru ​pentru ​linii, celalalt pentru coloane. 
 +    * Se observa de asemenea prezenta a doua butoane. Ele sunt folosite pentru a misca masina jucatorului in stanga si in dreapta. 
 +===== Schema hardware ===== 
 +{{:​pm:​prj2022:​arosca:​diag_hardware.png?​800}}
  
-===== Bibliografie/​Resurse ​=====+===== Implementare software ​===== 
 +     * "​Desenarea"​ scenei functioneaza asemanator cu un televizor vechi: fiecare coloana este aprinsa, pe rand, insa cu atat de putin delay intre tranzitii incat ochiul uman nu le poate detecta. 
 +     * Scena este defapt statica, desenata la fiecare ciclu al functiei while() din loop(), luand in considerare anumite variabile (numarul liniei pe care se afla jucatorul/​un inamic, coloana pe care se afla un inamic). 
 +     * Variabilele aceseta sunt modificate folosind intreruperi:​ 
 +         * Variabila ce denota linia pe care se afla jucatorul este schimbata in doua functii de intreruperi (pentru directia stanga, respectiv dreapta). Aceste intreruperi sunt atasate celor doua butoane mentionate anterior. 
 +         * Variabila ce denota linia pe care un inamic va aparea este de asemenea schimbata intr-o intrerupere,​ insa de data aceasta folosesc o intrerupere pe timerul intern. 
 +         * Miscarea inamicului este tratata in aceeasi intrerupere. La un anumit interval de timp, creste indexul coloanelor pe care sunt "​desenati"​ inamicii. 
 +     * Inamicii pot veni de pe maxim 3 linii (mereu ramane una libera), la intervale aleatorii. 
 +     * Coliziunea jucatorului cu un inamic este tratata la fiecare ciclu. Daca o masina inamica ajunge pe aceleasi coloane si aceeasi linie cu jucatorul, jocul se opreste, se aprind toate led-urile pentru a semnala acest lucru, si jocul o ia de la capat.
  
 +===== Rezultat final =====
 +   * Video: https://​www.youtube.com/​watch?​v=uSwPenMtLd0
 +===== Concluze =====
 +   * Acest proiect m-a invatat <​del>​ca trebuie sa ma apuc mai devreme de proiecte</​del>​ cum functioneaza un shift register folosit pentru a controla foarte multe LED-uri. De asemenea, am aprofundat conceptul de intrerupere,​ atat intreruperi hardware cat si folosirea unui timer intern.
 +===== Resurse/​Ghiduri folosite =====
 +   * Canalul DroneBot Workshop https://​www.youtube.com/​c/​Dronebotworkshop1 pentru:
 +           * Cum sa folosesc un cip shift register
 +           * Aprofundare intreruperi
 +   * Laboratoare PM
 +===== Download cod sursa =====
 +   * https://​github.com/​darian1901/​retro_racing_game_arduino
 <​note>​ <​note>​
-    Jocul original: https://​www.youtube.com/​watch?​v=H-L_ra5kT3k+    Jocul original, inspiratia acesui proiect: https://​www.youtube.com/​watch?​v=H-L_ra5kT3k
 </​note>​ </​note>​
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
 +
  
pm/prj2022/arosca/darian.vrabie.1650570242.txt.gz · Last modified: 2022/04/21 22:44 by darian.vrabie
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