Table of Contents

Andrei-Corneliu SUCIU - X si 0 pe matrice de LED-uri

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul meu reprezinta implementarea in hardware a celebrului joc x si 0. Pentru realizarea acestuia am folosit 9 leduri bicolore, cate o culoare pentru fiecare dintre cei doi jucatori. Acestia au posibilitatea de a muta pe tabla folosindu-se de grupul de 5 butoane simbolizand un joustick cu comenzile sus, jos, stanga, dreapta, si in final butonul din centru reprezantand enter. Cand unul dintre jucatori castiga, linia coloana sau diagonala se va colora in culoarea jucatorului castigator, iar in caz de remiza toate ledurile se vor aprinde rezultand o cumoare oarecum portocalie.

Descriere generală

Schema bloc:

Hardware Design

Aveti in aceasta sectiune schema hardware a circuitului de pe placa secundara. Am conectat la PORTA, PORTC si PB1, PB2 cele 9 leduri bicolore(18 conexiuni in total), iar butoanele le-am conectat la PB3, PB4, PB5, PB6, PB7. Masa circuitului am conectat-o la PORTA pe bareta de pini.

Software Design

Mediul de dezvoltare folosit a fost Atmel Studio 6.1. Aici compilam sursa rezultand fisierul.hex dupa care ma foloseam de bootloaderHID de la laborator pentru a incarca programul pe placuta. Pentru implementarea efectiva a jocului am folosit doua matrici, una care sa corespunda cu fiecare led de pe placa secundara, iar una care sa tina evidenta tablei de joc. Intr-o bucla infinita in functia tic_tac_toe verific folosid functia button_pressed() daca se apasa pe un buton si pe care anume. Daca se apasa pe unul dintre butoanele de setare a directiei se apeleaza functia action_Performed() in care verific tabla pentru a vedea daca in directia dorita nu se afla deja o pozitie marcata, iar daca exista una nu se poate efectua mutarea(am facut asta deoarece atunci cand mut intr-o directie tot ce fac este sa sting ledul de unde plec si dupa calcularea noilor valori curente sa aprind ledul care se mapeaza pe acestea. Datorita acestei abordari daca treceam peste un led deja setat ca fiind aprins acesta se stingea. In spate logica jocului nu era afectata, insa se pierdea evidenta locurilor marcate de jucatori pe tabla fizica). In caz de apasare a butonului enter(select) primul lucru pe care il fac dupa aprinderea ledului selectat este sa verific apeland functia test_if_finish() daca nu cumva s-a terminat jocul, unul dintre jucatori reusind sa completeze o linie o coloana sau o diagonala. Functia de asemenea prezinta un parametru secundar pe care il verific intr-un switch-case pentru a vedea concret tipul de linie/coloana/diagonala si sa afisez pe leduri terminarea jocului prin aprinderea ledurilor simbolizand linie/coloana/diagoanala. In cazul in care numarul de mutari este egal cu 9 inseamna ca jocul s-a incheiat la egalitate si ies din bucla infinita si respectiv din functie prin return. In functia main, dupa terminarea jocului se poate apasa tasta din centru si incepe un nou joc.

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

A fost un proiect interesant pe care chiar l-am realizat cu placere. In primul rand nu este un proiect dificil, atat soft-ul cat si hard-ul au fost oarecum usor de facut. Mi-a placut faptul ca am implementat in sfarsit ceva de la zero in 3 ani de facultate, iar faptul ca am realizat montajul hardware m-a facut sa inteleg mult mai bine modul in care un computer lucreaza. Ii sfatuiesc pe cei care vor realiza un astfel de proiect in viitor sa isi organizeze foarte clar modul in care vor conecta placuta secundara cu cea de baza. Eu am lipit “la intamplare” placuta la inceput, iar cand a trebuit sa o conectez cu cea principala a trebuit sa ma chinui mult sa vad corespondenta dintre baretele de pini si leduri/butoane deoarece aveam toate cablurile incurcate pe spate.

Download

x_si_0_suciu_andrei_331cb.zip

Jurnal

1) Am cumparat componetele si placa de baza (sapt 1) 2) Lipire placuta de baza (sapt 2) 3) Cumparare componente suplimentare (sapt 3) 4) Lipire placuta secundara (sapt 5) 5) Software (sapt 6)

Bibliografie/Resurse

Datasheet ATMega324A; Laborator 0