Snake pe o matrice de LED-uri

Introducere

Scopul proiectulului este implementarea unui joc de snake pe o matrice de LED-uri (16×8). Am utilizat LED-uri bicolore pentru o reprezentare cat mai realista a jocului. Jucatorul are la dispozitie 4 butoane (sus, jos, stanga, dreapta).

Descriere generală

Pentru realizarea jocului am utilizat doua matrice de LED-uri, bicolore, de dimensiune 8×8. Matricele sunt fixate pe o placa auxiliara, impreuna cu butoanele de control si restul componentelor necesare. Conexiunea intre matrice si restul componentelor de pe placa auxiliara, cat si conexiunea dintre placa de baza si placa auxiliara se face prin intermediul unor fire de legatura.

Comenzile sunt date prin intermediul butoanelor; aceste comenzi ajung la ATmega16, care ulterior va procesa comanda, aprinzand matricea de LED-uri corespunzator.

structura_.jpg

Hardware Design

Placa de baza a fost realizata conform indicatiilor http://cs.curs.pub.ro/wiki/pm/tutorial/placa

Placa auxiliara

Lista componente:

  1. 2 matrice de LED-uri bicolore 8×8 (TBA23-12EGWA Kingbright Electronic)
  2. 6 butoane (sus, jos, stanga, dreapta, start, pauza - am renuntat ulterior la ultimele doua butoane)
  3. 6 inversoare ( SN74HC04N )
  4. 6 demultiplexoare ( SN74HC138N )
  5. 16 rezistente ( 1K )
  6. fire de legatura

Matrice de LED-uri bicolore: matrice.jpg Pe o coloana LED-urile din stanga sunt verzi, iar cele din dreapta sunt rosii

Control linii: control_linie_.jpg

Control coloane: control_coloana_.jpg Este exemplificata modalitatea de control a LED-urilor verzi de pe una din matrici

Software Design

     Pentru a facilita controlul matricelor de LED-uri, am implementat functiile:  
	/* aprinde LED-ul rosu de pe coloana x a primei matrice - linia LED-ului va fi setata de enableLine */
	setFirstRed(x)
	/* aprinde LED-ul verde de pe coloana x a primei matrice - linia LED-ului va fi setata de enableLine */
	setFirstGreen(x)
	/* aprinde LED-ul rosu de pe coloana x a celei de-a doua matrice - linia LED-ului va fi setata de enableLine */
	setSecondRed(x)
	/* aprinde LED-ul verde de pe coloana x a celei de-a doua matrice - linia LED-ului va fi setata de enableLine */
	setSecondGreen(x)
	/* activeaza linia x - matrcea este selectata in functie de coloanele activate (setFirst* , setSecond* ) */
	enableLine(x)
	
	/* aprinde LED-ul rosu de pe pozitia (i,j), considerand ca avem o singura matrice 16x8 */
	lightRed(i,j)
	/* aprinde LED-ul verde de pe pozitia (i,j), considerand ca avem o singura matrice 16x8 */
	lightGreen(i,j)
       Implementarea jocului
              - momeala este reprezentata de un LED rosu
              - sarpele este reprezentat prin LED-uri verzi
              - pentru o miscare cat mai realista a sarpelui, retin pentru fiecare LED (element component) sensul sau de miscare 
              - dupa ce se ajunge la o lungime maxima, jocul se reseteaza
              - de asemenea, daca pierzi, jocul se reseteaza
              - functii utile
                         /* determina daca am atins un obstacol => resetare joc, sau daca am ajuns la o momeala => modificare dimensiune */
                         collision()
                         /* implementeaza deplasarea efectiva */
                         move()
                         /* verifica daca avem o comanda de la butoane */
                         checkButtons()
        Modificari aduse jocului clasic de snake:
              - am ales ca sarpele sa poata fi mutat doar din butoane (nu are si el o miscare implicita, atunci cand nu este apasat nici un buton)
               

Rezultate Obţinute

Proiectul functioneaza asa cum mi-am propus.

imag0488_.jpg

Dupa cateva zile de lipit fire:

imag0491_.jpg

Concluzii

A fost destul de dificil de realizat placuta pentru ca au fost foarte multe legaturi de facut, si am folosit doar fire de legatura. Partea de software nu a fost foarte dificila, dar am intampinat ceva probleme pentru ca nu se poate aprinde decat un LED la un moment dat si totusi trebuie sa creezi impresia ca sunt aprinse mai multe LED-uri simultan.

Download

Jurnal

-

Bibliografie/Resurse

pm/prj2012/abostan/5.txt · Last modified: 2021/04/14 17:07 (external edit)
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