Table of Contents

Introducere

Proiectul se referă la un joc electronic compact, capabil să joace mai multe jocuri diferite de memorie, cu unul până la 4 jucători. Acesta constă dintr-o suprafață de joc cu 9 lumini roșii și 4 butoane.

Ideea jocului a pornit de la un joc electronic real numit MiniWizard (vezi referințe).

Descrierea jocurilor:

MATCH ME - joc de memorie pentru un singur jucător

HAMMERING HANDS - joc single-player de acțiune

FLASHING THREE - joc single-player de logică

FOLLOW THIS - joc de memorie cu mai mulți jucători

CRUCIAL CORNERS - joc de acțiune cu mai mulți jucători

CENTER SHOT - joc multiplayer de coordonare a mâinii și văzului

COMMON LIGHT - joc de observație și memorare cu mai mulți jucători

MATH DASH - joc multiplayer de adunare

Proiectul va încerca să implementeze acest joc electronic, utilizând 9 LED-uri, 4 butoane, o tastatura de pe care se poate selecta numărul jocului, un ecran LCD pe care vor apărea mesaje pentru jucători și un buzzer pentru sunete.

Descriere Generala

Schema Bloc

Proiectul va avea următoarele componente:

Descriere Componente

Dispozitivul va comunica cu jucătorul prin toate elementele sale: utilizarea principală este dată de butoane si LED-uri prin intermediul cărora se desfășoară jocurile; Diverse mesaje (de început de joc, numele jocului, câștig sau pierdere) sunt afișate pe ecranul LCD atașat jocului; de asemenea, jucătorul interacționează cu jocul și prin tastatura, care ii permite sa aleaga numărul unui joc din cele 8.

Hardware Design

Piese folosite la proiect

La piesele necesare plăcuței de bază s-au adăugat următoarele componente pentru finalizarea proiectului:

Schema electrica

Schema electrică a fost realizată în Proteus ISIS, pentru a putea face și niște simulări înainte de programarea plăcuței.

Astfel, interfațarea LCD-ului se face pe 7 biți (conform indicațiilor din laborator), acesta ocupând astfel aproape toți pinii portului A al microcontroller-ului.

În mod asemănător, tastatura ocupă tot portul C. Acesta este legată pin la pin cu microcontroller-ul astfel: pinii PC0-PC3 vor reprezenta rândurile matricii pornind de sus în jos, iar pinii PC4-PC7, coloanele pornind de la stânga la dreapta.

Având în vedere că pentru cele 9 LED-uri nu este suficient un port (nu s-a luat în considerare legarea LED-urilor în matrice deoarece aceasta ar fi adus beneficii semnificative doar în cazul unul număr mai mare de LED-uri; având în vedere numărul mic și fixat, s-a considerat mai eficientă ocuparea a încă 3 porturi, decât complexitate construirii și utilizării unei matrici de LED-uri), 8 LED-uri sunt interfațate pe portul B, ocupând toț pinii disponibili ai acestuia, iar ultimul LED este plasat pe singurul pin rămas liber la portul A, PA7.

Cele 4 butoane sunt atașate microcontroller-ului la portul D, pe pinii nefolositi ai acestuia (PD0, PD1, PD4, PD5).

Buzzer-ul este prins cu un fir la masă și celălalt la un pin din portul D (PD7).

Software Design

Proiectul a fost realizat și compilat cu WinAVR.

Acesta conține un fișier sursă separat pentru API-ul LCD-ului (pus la dispoziție la laborator):

void LCD_init();               
void LCD_writeInstruction(unsigned char _instruction);	
void LCD_writeData(unsigned char _data);		
void LCD_write(unsigned char _byte);			
void LCD_waitNotBusy();					
void LCD_waitInstructions(unsigned char _instructions);	
void LCD_print(char* _msg);				
void LCD_print2(char* _msg1, char* _msg2);
void LCD_printDecimal2u(unsigned int _n);		
void LCD_printHexa(unsigned int _n);

De asemenea, fișier sursa separat pentru lucrul cu tastatura:

void KEYPAD_init();	//initializare tastatura
void get_key();		//obtinere tasta apasata

La acestea se adaugă un fișier sursă cu funcțiile necesare jocului:

void start_game();		//animatia de inceput a jocului
void select_game();		//modul de selectare a jocului in functie de butonul apasat la tastatura
 
/* jocurile propriu-zise pe care le stie programul */
void match_me();		
void hammering_hands();
void flashing_three();
void follow_this();
void crucial_corners();
void center_shot();
void common_light();
void math_dash();

În funcția main() a programului se initializeaza mai intai toate componentele necesare jocului:

LED_init();
BUTTON_init();
BUZZER_init();
KEYPAD_init();
LCD_init();

după care se pornește animația de început a jocului și jucătorul este invitat prin intermediul mesajelor de pe LCD să își aleagă un joc folosind tastatura. Acesta poate folosi primele 8 butoane de la tastatură pentru a alege unul din cele 8 jocuri disponibile. Odată ales jocul, acesta este rulat prin diferitele schimbări de stare ale LED-urilor (schimbări automate, programate sau generate de apăsarea butoanelor).

De exemplu, algoritmul primului joc reține într-un vector secvența de laturi aprinse, verificând apoi, când vine rândul jucătorului, la fiecare apăsare de buton dacă s-a apăsat cel corespunzător laturii din vector. Dacă nu, jocul se oprește și pe LCD este afișat un mesaj care anunță jucătorul că a pierdut. Dacă jucătorul reușește șă rețină și să reproducă până la sfârșit secvența de laturi, pe ecranul LCD-ului este afișat un mesaj de câștigare a jocului. În ambele cazuri jucătorul poate să își aleagă după aceea un nou joc.

Pentru unele dintre jocurile posibile ale dispozitivului, este necesar să se implementeze un timer (de exemplu pentru jocul FLASHING THREE, unde cele trei lumini principale sunt evidențiate față de celelalte prin faptul că sclipesc).

Rezultate

Principalul rezultat obținut constă în funcționarea corectă a programului mai întâi la verificarea pe simulatorul Proteus, și mai apoi pe plăcuță (cu excepția tastaturii).

Din păcate nu a fost timp decât pentru implementarea a două jocuri din cele opt posibile, sperând ca următoarele să fie dezvoltate la un moment de timp ulterior.

Concluzii

Concluziile pot fi trase în urma experiențelor avute cu plăcuța

O problemă întâmpinată a fost aceea a memoriei disponibile reduse. Deși cele 2 jocuri implementate au suficient loc în memoria microcontroller-ului, pentru funcționarea tuturor celor 8 jocuri ar fi nevoie de un microcontroller cu memorie mai mare.

De asemenea, o altă greutate a constat în planificarea pinilor microcontroller-ului pentru legarea la componente, având în vedere că acest proiect necesita mulți pini disponibili. Totuși aceștia au fost plasați într-un mod corespunzător care să ușureze și programarea și lipirea pe plăcuță.

Referințe

Jocul electronic MiniWizard: Mini_Wizard.pdf

Interfațare tastatură:

Download

Codul sursă al programului: memorygame_maria_carpenamarie.zip