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:47]
darian.vrabie [Introducere]
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 ​gasit cu cel 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 din fataViteza cu care masinile ce trebuie evitate apar pe ecran creste gradual, jocul devenind din ce in ce mai greuImplementarea NU se va face pe un ecran LCD, ci 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+   * 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
  
-===== Bibliografie/​Resurse ​=====+Descriere implementare hardware 
 +<note tip>​Stiati ca breadboard-urile au conexiuni comune intre gaurile de pe aceeasi coloana numerica?  
 +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 fiecare. Led-urile de pe fiecare linie sunt inseriate la anod. 
 +        * Catodurile led-urilor sunt inseriate (short-ate?​) pe orizontala, de la o linie la alta, formand astfel 8 coloane. 
 +        * Astfel, daca conectam prima coloana la GND si prima linie la VCC, se aprind primele 2 LED-uri (din moment ce sunt inseriate, cele 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}}
  
 +===== 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.1650570422.txt.gz · Last modified: 2022/04/21 22:47 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