Radu-Ionuț MOCANU (78641) - Connect Four

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Scopul proiectului consta in realizarea unui joc de tip connect four pe o matrice de led-uri 8*8.

Aceasta va avea led-uri de doua culori diferite pentru a face diferenta intre jucatori (m(). Intentionez sa folosesc si un difuzor pentru a reda sunete cand sunt apasate butonale ce vor decide pozitionarea pieselor. Jocul va avea un mod multiplayer si un mod in care se poate juca impotriva unui AI.

Utilitatea proiectului consta in rolul acestuia ca sursa de divertisment de care poate beneficia oricine.

Descriere generală

Proiectul are 5 componente pricipale:

  • Butoane, de la acestea se vor alege mutarile, precum si modul de joc
  • Microcontrollerul
  • Matricea de LED-uri, pe aceasta va fi afisat jocul
  • Difuzorul, va scoate sunete cand sunt apasate unele butoane
  • Tabela de scor, aceasta va retine scorul dupa mai multe meciuri

Hardware Design

Lista de piese:

  • Componente de baza
  • 7 Butoane
  • Matrice LED-uri 8×8
  • Tabela scor
  • Difuzor
  • 3 x MAX7219, unul integrat in tabela de scor
  • condensator pentru difuzor
  • 2 rezistente de 10k pentru cele 2 componente MAX7219 care controleaza matricea de LED-uri

Edit:

  • schimbarea matricei folosite a redus numarul de max7219 la 2, unul integrat in tabela, unul in matricea de led-uri
  • nu mai este nevoie de cele doua rezistente :-(
  • pinii folositi au fost modificati pentru a reduce timpul de lipire

Noua matrice folosita: https://www.optimusdigital.ro/ro/optoelectronice-matrice-de-led-uri/118-modul-cu-matrice-de-led-uri-max7219.html

Schema modificata:

Proiectul meu a avut 3 forme. Initial toate componentele au fost conectate pe un breadboard. Au aparut probleme de conexiuni imperfecte sau lipsa date de calitatea componentelor, ceea ce a dus la prima evolutie: mutarea matricei bicolore si a celor doua MAX7219 pe o placuta separata si efecturea lipirii acestora folosind fludor. Aspectul rezultat a fost unul neplacut si, desi conexiunile pareau sa fie corecte, iar matricea se aprindea, led-urile nu puteau fi controlate din program. Pentru a rezolva problema am inlocuit matricea bicolora cu una avand o singura culoare ce este controlata de un max7219. Acesta este conectat la matrice printr-un circuit integrat (max-ul a fost initial scos din circuitul integrat pentru fi legat de un altul in scopul controlarii matricei bicolore). Pentru a asigura conexiunile dintre componente, am mutat intreg proiectul pe o placuta si am realizat toate conexiunile prin lipire. Rezultatul final este unul de care ma pot declara mandru: proiectul are un aspect placut si este usor de controlat de catre jucatori.

Pentru a nu se rupe cablurile de pe spate am adaugat niste picioruse placutei sub forma unor suruburi de tip M4. In total sunt 5 suruburi: unul in fiecare colt si unul in mijlocul marginii orientate catre jucator pentru a facilita apasarea butoanelor.

Software Design

Mediul de dezvoltare: Programmer's Notepad

Site-uri bibioteci MAX7219:

http://davidegironi.blogspot.ro/2013/07/avr-atmega-max7219-7-segment-led-matrix.html
https://tinusaur.org/projects/max7219led8x8/

La apasarea unuia dintre cele 7 butoane se coboara o piesa pe coloana corespunzatoare. Cand unul dintre jucatori isi aliniaza 4 piese pe linie, coloana sau diagonala acesta castiga jocul, fapt inregistrat pe tabela de scor ce retine punctajul fiecarui jucator in urma meciurilor ce au avut loc de la inceputul executiei.

Inregistrarea apasarii butoanelor este facuta folosind intreruperi.

La inregistrarea unei mutari, precum si la incheierea meciului se vor reda sunete folosind difuzorul.

Structurile folosite pentru cele doua matrice (rosu si verde) sunt doi vectori de unsigned char, fiecare bit reprezentand daca led-ul corespunzator din matricea bicolora este aprins.

Algoritmul de verificare a conditiei de castigare a jocului porneste de la ultima piesa asezata pe tabla si verifica daca aceasta face parte dintr-o formatie castigatoare.

Programul de testare a logicii din spatele proiectului ruleaza execat ca cel incarcat pe placuta, insa in loc de aprindere de led-uri sau alte efecte din tabela de scor / difuzor afiseaza matricea in consola. Aceasta isi ia intrarea de la tastatura, tastele folosite fiind 0, 1, 2, 3, 4, 5 si 6.

Biblioteca de control a MAX7219:

  • void MAX7219_byte(uint8_t data); - transmite 8 biti de informatie catre controller
  • void MAX7219_word(uint8_t address,uint8_t dat); - transmite 16 biti de informatie catre controller prin 2 apeluri ale metodei de mai sus
  • void MAX7219_init(void); - initializeaza Porturile cu care va fi controlat Max7219
  • void MAX7219_row(uint8_t address,uint8_t dat); - trimite un rand catre max7219
  • void MAX7219_buffer_out(uint8_t *buffer); - trimite o matrice(un vector de char-uri) catre max7219
  • void MAX7219_buffer_set(uint8_t x, uint8_t y); - modifica o matrice in forma de mai sus
  • void MAX7219_buffer_clr(uint8_t x, uint8_t y); - modifica o matrice in forma de mai sus

MAX7219_buffer_out a fost modificata pentru a transpune matricea inainte de trimiterea acesteia pentru a afisa corect desi matricea este rasucita la 90 de grade in proiect

O descriere mai in detaliu o modului de functionare a programului se poate gasi in readme.

Rezultate Obţinute

Concluzii

A fost un proiect foarte interesant din care simt ca am invatat foarte multe. Sunt mandru de rezultatul obtinut, chiar daca nu este ideal. Planific pe viitor sa adaug un bot care sa fac o mutare pentru tine automat si eventual chiar un alt joc (unul care se potriveste mai bine pe o matrice de LED-uri de o singura culoare).

Download

Jurnal

20.05.2018

  • Modificat schema astfel incat sa nu fie inclus decat ce este lipit
  • Schimbat pini folositi din motive date de aranjarea placii pe breadboard
  • Tabela de scor nu este functionala asa ca este posibil ca aceasta sa fie scoasa din proiect
  • LED-urile matricei raman mereu aprinse, posibil o conexiune imperfecta sau inexistenta cu unul dintre pinii cu care este controlat primul MAX7219

21.05.2018

  • Tabela de scor este acum functionala
  • Functionarea bibliotecii pentru MAX7219 a fost confirmata
  • Eroarea la controlul matricei de led-uri tine de hardware
  • Adaugat program de testare a logicii programului

22.05.2018

  • Matricea bicolora a fost inlocuita cu o matrice cu leduri de o singura culoare (rosie)
  • Noua matrice este inclusa intr-un circuit integrat si este controlata de un singur MAX7219 (max folosit pana acum in incercarea de a controla matricea bicolora)
  • Proiectul a fost refacut folosind lipituri pentru a avea un aspect mai placut si a fi mai usor de utilizat
  • Schema electrica si lista de componente au fost actualizate corespunzator
  • Descrierile hardware si software au fost adaptate pentru a oferi mai multe informatii relevante implementarii si pentru a fi in concordanta cu versiunea curenta a proiectului

23.05.2018

  • A fost adaugat un mod de afisare nou pentru matricea de leduri. Prin apasarea butonului de pe placuta de baza, PD6, matricea va aprinde doar ledurile corespunzatoare jucatorului curent facand jocul mai usor de inteles
  • Tabela de scor afiseaza scoruri de la 0 la 9, cu posibilitatea de a afisa si numere mai mari sau anumite efecte speciale pe viitor
  • Pentru a rezolva problema arajarii la 90 de grade a matricei de led-uri a fost modificata biblioteca pentru a efectua transpunerea in timpul afisarii

Bibliografie/Resurse

MAX7219 DS: https://www.sparkfun.com/datasheets/Components/General/COM-09622-MAX7219-MAX7221.pdf

ATMEGA PINOUT: https://elementztechblog.files.wordpress.com/2016/10/bobuino_pinout.png

Matrice LED-uri: https://static.optimusdigital.ro/3282-large_default/matrice-de-led-uri-bicolora-roie-i-verde-8x8-375-mm.jpg

Site-uri bibioteci MAX7219:

http://davidegironi.blogspot.ro/2013/07/avr-atmega-max7219-7-segment-led-matrix.html
https://tinusaur.org/projects/max7219led8x8/
  • Documentația în format PDF
pm/prj2018/ddragomir/radu.mocanu.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