Constantin Ciprian MIHĂILĂ - Snake on Led Matrix

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

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.

Descriere generală

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.

Hardware Design

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 Design

Software folosit

  • Eagle
  • WinAvr, Programmer's Notepad
  • bootloadHID

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);
  

Rezultate Obţinute

Rezultatul este un joc snake functional cu diferite niveluri de speed.

Joc speed1

http://youtu.be/UGMKmMdc61Y

Joc speed2

http://youtu.be/3vZk8n1u0g4

Joc speed3

http://youtu.be/-en2exUAjFY

Concluzii

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.).

Download

Schema Eagle: 00myschen.sch

Surse implementare :surse_snake.zip

Jurnal

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;

Bibliografie/Resurse

pm/prj2013/avoinescu/snake-pe-matrice-led.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