Ion-Gabriel TĂBUȘ (67450) - LED Shaman Totem Game
Autorul poate fi contactat la adresa: Login pentru adresa
Introducere
Prezentarea pe scurt a proiectului vostru:
ce face: Permite controlul unui joc afisat pe o matrice de leduri de 5×5 prin 5 butoane.
care este scopul lui: Aducerea tuturor ledurilor de la culoarea rosie la culoarea albastra pentru a bate nivelul curent. Fiecare nivel terminat deschide un alt nivel mai greu. Cu ajutorul unui cursor jucatorul parcurge matricea de leduri si schimba culoarea ledului curent, schimbarea culorii ledului curent implicit duce si la schimbarea culorii ledurilor adiacente.
care a fost ideea de la care aţi pornit: Acest joc este un puzzle mini-game oferit de un NPC (Puzzlemaster Lo), NPC existent intr-unul dintre cele mai cunoscute MMORPG-uri actuale World of Warcraft. Am considerat jocul ca fiind ideal pentru implementarea pe o matrice de leduri.
de ce credeţi că este util pentru alţii şi pentru voi: Jocul este un joc puzzle, nu este un joc greu dar nici usor, este destul de amuzant. Jocul testeaza ingeniozitate jocatorului.
Descriere generală
Schema bloc proiect:
Utilizatorul foloseste cele 4 butoane (Sus/Jos/Stanga/Dreapta) pentru a parcurge matricea de 5×5 leduri, al 5-lea buton este folosit pentru schimbarea culorii ledului curent si a culorii ledurilor adiacente acestuia. Ledul pe care se afla cursorul este un led care se stinge si aprinde la intervale de timp vizibile.
Hardware Design
Lista de piese:
1 x ATmega324
25 x LED RGB Common Anode
5 x Buton
15 x Rezistenta 220 Ω
5 x Rezistenta 22K Ω
5 x Tranzistor BC517
2 x Registru de deplasare 74HC595
27 x Pini Mama
1 x Rola sarma de otel 0.9 mm (sau 0.7)
1 x placa de test
1 x Breadboard HQ(830 puncte)
65535 x fire T-T, T-M
Recomand folosirea pentru conexiuni:
intre ATmega324A si matrice leduri, pini T combinati cu fire M-M;
intre ATmega324A si breadboard, fire M-T;
In felul acesta nu exista riscul de intreruperi de conexiuni.
PINI ATmega324A:
Registrii de deplasate inseriati:
Schema Matrice de Leduri RGB:
Matrice de Leduri RGB:


Software Design
Am setat pinii necesari de input si output:
INFO:
--BUTOANE--
PB0 - UP
PB1 - DOWN
PB2 - CHANGE
PB3 - RIGHT
PB4 - LEFT
--COLOANE MATRICE--
PA0 - COLUMN 0
PA1 - COLUMN 1
PA2 - COLUMN 2
PA3 - COLUMN 3
PA4 - COLUMN 4
--REGISTRI DE DEPLASARE--
PC0 - DATA-IN
PC1 - CLOCK
PC2 - LATCH
Precizare: Ulterior am decis sa pun coloanele pe PORTA (in schema sunt pe PORTC) si sa folosesc PORTC pentru pini registrilor de deplasare.
Am creat cateva functii pentru a ma ajuta sa incarc registrii de deplasare cu bitii coloanei curente. Folosind functiile de incarcare si functia de activarea a coloanelor independent am definit o functie de afisare matrice de joc si alte cateva functii de alterare a acesteia. Toate operatiile le fac pe matricea global definita, astfel memoria este folosita minim. Alte functii definite sunt cele de gameplay si functia principala a jocului. Toate aceste functii sunt comentate in cod.
Descriere functionalitate:
Pe matrice este afisat mesajul S.T.A.R.T dupa care incepe primul nivel.
Dupa trecerea celor 5 nivele implementate, nivelele sunt generate random (functia a fost testata si este functionala, dar nu a fost implementata pe placa, am o versiune mai veche de AVR ce nu detine biblioteca time.h si nu pot compila codul pentru placuta deoarece foloseste functia rand() pentru generare random, astfel am decis sa comentez functia in cod si sa las doar cele 5 nivele).
Daca utimul nivel este trecut, este afisat un mesaj de G.A.M.E O.V.E.R si in loop un mesaj T.O.T.A.L V.I.C.T.O.R.Y.
Rezultate Obţinute
Concluzii
Un proiect destul de ok daca te apuci din timp. Am invatat sa folosesc registrii de deplasare si multiplexare folosind tranzistoare. Sunt destul de multumit de rezultatul obtinut, cea mai satisfacatoare parte a fost sa construiesc eu matricea de leduri si sa imi iasa perfect din prima (cu putina bataie de cap si degete arse). Recomand viitoarelor generatii abordarea unui joc pe matrice de leduri.
Download
Jurnal
21 Aprilie 2017 - schema bloc si o lista partiala de componente au fost postate
3 Mai 2017 - am inceput sa fac schema electrica pentru matricea de leduri
9 Mai 2017 - am terminat de lipit placa ATmega324A
5 Mai 2017 - am terminat schema electrica si am inceput sa implemetez matricea de led-uri pe placuta de test
12 Mai 2017 - am terminat de implementat matricea de leduri pe placa de test si am updatat lista finala de componente
17 Mai 2017 - toate componentele hardware au fost lipite, conectate si testate individual
18 Mai 2017 - am inceput sa scriu codul pentru joc
19 Mai 2017 - primul test software, totul merge ok dar din cauza modului de incarcare al bitilor pe registrii de shift printr-o bucla for() prin parcurgere descrescatoare a vectorului de biti acestia nu primesc datele (problema rezolvata prin incarcarea bitilor cu bucla for() prin parcurgere crescatoare a vectorului).
21 Mai 2017 - partea software a fost implementata si totul este functional 100%
Bibliografie/Resurse
Documentația în format
PDF