Numele proiectului este MemoPlus iar scopul sau este de a dezvolta memoria vizuala a utilizatorului prin retinerea unei secvente cat mai mare de leduri aprinse.
Initial jocul incepe cu o secventa de 2 leduri si creste cu 3 la fiecare finalizare a unui unui nivel. Sunt posibile maxim 6 niveluri astfel incat la terminarea jocului utilizatorul va trebui sa retina o secventa de 17 leduri.
Realizarea proiectului a presupus folosirea urmatoarei scheme bloc :
Datele preluate de la utilizator sunt reprezentate de apasarile butoanelor care formeaza tastatura, iar modificarile sunt vizibile prin aprinderea ledurilor.
Componentele necesare pentru realizarea proiectului sunt :
Scrierea efectiva a codului a fost realizata in Notepad++, iar obtinerea fisierelor executabile a fost realizata prin intermediului compilatorului avr-gcc
Pentru a usura modalitatea de compilare si incarcare a programului pe mircrocontroler am create un fisiere makefile si am folosit programul avrusbboot
Starile prin care poate trece programul in cursul unei executii normale :
Realizarea programului a presupus implementarea unor functii care sa permita lucrul cat mai usor cu cele 16 leduri si cu preluarea butoanelor apasate de la utilizator :
void turnOffLight(int px,int py);//stinge ledurile pentru joc void setLights();//seteaza luminile de joc void Lights();//seteaza luminile de scor void setKeyboard();//seteaza butoanele pentru tastatura int getPressedButton();//preia un buton apasat void waitPressedButton(int button);//apasa eliberarea unui buton void switchScor(int x);//modifica starea unui led de scor void turnOffScor(int x);//stinge un led de scor void turnOnScor(int index);//aprinde un led de scor void clearScor();//stinge toate ledurile de scor void setAllScor(); //aprinde toate ledurile de scor void switchPosLight(int px,int py);//schimba starea unui led de joc void turnOffLight(int px,int py);//stinge un led de joc void switchLight();//schimba stare ledului de joc selectat void switchIndexLight(int index);//schimba starea unui led joc dupa index void incLight(int type,int value );//modifica ledul de joc selectat void incX();//aprinde urmatorul led pe axa ox void decX();//aprinde ledul anterior pe axa ox void incY();//aprinde urmatorul led pe axa oy void decY();//aprinde ledul anterior pe axa oy void setPattern();//seteaza o secventa aleatoare void turnLightsOn();//aprinde toate ledurile int getPattern();//preia secventa de la utilizator void winLights();//aprinde ledurile de castig ale jocului void intro();//aprinde toate ledurile si asteapta inceperea jocului
Ledurile au fot conectate fiecare la cate un port al microcontroler-ului si la ground prin folosirea unei rezistente de 200 Ohmi. Desi este destul de ineficient din punctul de vedere al numarului de portului folosite, a fost mai simplu de lipit pe placa de test.
Am folosit porturile A si C pentru interconectare. Modul de lipire nu este foarte important, conteaza doar realizarea ulterioara a corespondentei intre led si port.
Butoanele au fost plasate pe placa de test in urmatorul mod, pentru a forma tastatura :
Ok Aux No Up left right down
Pentru interconectarea cu microcontrolerul am folosit port B si la fel ca si in cazul ledurilor, conteaza doar realizarea corespondetei intre port si buton.
Proiectul a fost unul interesant si m-a ajutat sa inteleg modul in care se poate crea un produs fizic, pe care se poate incarca soft, pentru a obtine un joc distractiv.