Autorul poate fi contactat la adresa: Login pentru adresa
Implementarea cunoscutului joc Snake pe o matrice led 8*8. Jocul se poate juca la diferite niveluri de speed. Directia sarpelui poate fi controlata folosind patru butoane (stanga, dreapta, jos, sus). Sarpele va putea trece prin pereti, iar hrana sarpelui este generata aleator.
Microcontrolul Atmega324pa primeste comenzi de la butoane si modidifica starea matricii de leduri. Matricea de leduri este monocolora si poate fi controlata mergand pe fiecare linie sau coloana si aprinzand ledurile dorite din aceasta. Matricea are anozii si catozii conectati impreuna. Pentru a aprinde mai multe led-uri ale matricii odata (de pe coloane sau randuri) se foloseste fenomenul de Persistence of Vision. Mergand pe fiecare rand sau coloana cu frecventa foarte mica, ochiul uman nu poate percepe iteratia aprinderii randurilor sau coloanelor. Pentru aprinderea eficienta a matricii de leduri am folosit integratul ULN2804A format din perechi de tranzistoare darlington.
Lista Piese:
Placuta etapa I: http://cs.curs.pub.ro/wiki/pm/cablaj/proiect2013 Matrice leduri 8*8 TOM-2088BH ULN2804APG Soclu 18 pini 8 rezitente de 220 Ω 4 butoane Fire de Legatura
Placuta Etapa 1:
{{:pm:prj2013:avoinescu:0imag0460.jpg?300|}}
Schema Eagle:
Software folosit
Detalii implementare
Pentru implementare am organizat ledurile ca o matrice de 8*8 cu valori de 1 si 0, 1 atunci cand ledul de linia x si coloana y este aprins si 0 cand ledul este stins. Pinii A si C ai microcontroralui sunt retinuti in doi vectori: int pa_vect[8] si int pc_vect[8]; Coordonatele din matrice ale pozitiei sarpelui sunt retinute in doi vectori (x si y) pentru a fi mai usoara translatarea acestuia //void draw_matrix(int matrix[8][8])// - afiseaza matricea primita ca parametru (aprinde leduri de pe pozitiile cu valoarea 1 din matrice); //void gen_hrana()// - genereaza random o pozitie cu coordonatele x si y din matrice un se va genera o noua hrana; - pozitia generata este independenta de locatia sarpelui in matrice; - pozitia random generata este independenta la rulari diferite ale jocului (la fiecare rulare se genereaza un seed diferit); //int update_matrix()// - updateaza matricea , modificand pozitia sarpelui in functie de directia sa de deplasare(directia de deplasare a sarpelui poate fi modificata prin apasarea unui din cele 4 butoane); - verifica daca capul sarpelui a intalnit o hrana si mareste lungimea acestuia; - verifica daca exista coliziune intre capul sarpelui si corpul acestuia (returneaza 1 in caz de coliziune);
Rezultatul este un joc snake functional cu diferite niveluri de speed.
Joc speed1
Joc speed2
Joc speed3
Proiectul a fost unul util deoarece am vazut cum se poate realiza si programa un dispozitiv hardware. Tot proiectul a reprezentat o experienta benefica si interesanta. Realizarea proiectului nu a fost una foarte complicata. Lucrul matricea de leduri este un pic cam greu deoarece anozii si catozii acesteia sunt amestecati. Schema hardware poate fi extinsa si pentru alte jocuri (Tetris, Space Invaders etc.).
Schema Eagle: 00myschen.sch
Surse implementare :surse_snake.zip
1. Cumpare componente etapa 1 (placa de baza);
2. Participarea la placutiada;
3. Lipire componente si testare placa de baza;
4. Cumparare componente etapa 2;
5. Lipire componente pe placa de test, alegerea pinilor ce vor fii folositi la microcontroller si crearea legaturii intre placi;
6. Testare placa de baza;
7. Scrierea si debug-area surselor jocului;
8. Completare wiki;
Wiki PM :http://cs.curs.pub.ro/wiki/pm/
Data sheet pentru ATmega324PA: http://www.atmel.com/Images/doc2466.pdf
Librarie buton “pbno_m.lbr”: http://www.cadsoft.de/cgi-bin/download.pl?page=/home/cadsoft/html_public/demo.htm&dir=eagle/userfiles/libraries&sort=name