Differences

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

Link to this comparison view

pm:prj2023:fstancu:darian.vrabie [2023/05/26 19:42]
darian.vrabie created
pm:prj2023:fstancu:darian.vrabie [2023/05/29 16:13] (current)
florin.stancu
Line 1: Line 1:
-aaaa+====== Retro Racing Game - Darian VRABIE-DINU ====== 
 + 
 +===== 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:​prj2023:​fstancu:​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 
 + 
 +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 8×2=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:​prj2023:​fstancu:​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/​@Dronebotworkshop]] pentru: 
 +        * Cum sa folosesc un cip shift register 
 +        * Aprofundare intreruperi 
 +    * Laboratoare PM 
 + 
 +===== Download cod sursa ===== 
 +    * [[https://​github.com/​darian1901/​retro_racing_game_arduino]] 
 + 
 +<​note>​Jocul original, inspiratia acesui proiect: [[https://​www.youtube.com/​watch?​v=H-L_ra5kT3k]]</​note>​
pm/prj2023/fstancu/darian.vrabie.1685119373.txt.gz · Last modified: 2023/05/26 19:42 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