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).
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.
Placa de baza a fost realizata conform indicatiilor http://cs.curs.pub.ro/wiki/pm/tutorial/placa
Placa auxiliara
Lista componente:
Matrice de LED-uri bicolore: Pe o coloana LED-urile din stanga sunt verzi, iar cele din dreapta sunt rosii
Control coloane: Este exemplificata modalitatea de control a LED-urilor verzi de pe una din matrici
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)
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.
-
Datasheet ATmega16 http://cs.curs.pub.ro/wiki/pm/_media/doc2466.pdf
Datasheet TBA23-12EGWA http://www.tme.eu/dok/T/TBA23-11EGWA.pdf
Datasheet SN74HC138 http://www.ti.com/product/sn74hc138
Datasheet SN74HC04 http://www.datasheetcatalog.com/datasheets_pdf/S/N/7/4/SN74HC04.shtml